欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6263|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

STC8單片機(jī)的ADC轉(zhuǎn)化結(jié)果去控制PWM頻率輸出,怎么沒反應(yīng)啊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:531986 發(fā)表于 2019-9-12 10:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  
/********************************************************
        功能  :用電位器通過STC8AD片內(nèi)AD和PWM控制電機(jī)轉(zhuǎn)速
        單片機(jī);STC8AD
        晶振  :12M
        作者  :張駿杰
        時(shí)間  :2019-11-4
********************************************************/
#include<STC8.H>        
#include <intrins.h>   
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define  uint16   unsigned int
#define  uint8   unsigned int

uint M;

/**************************************
功能描述:延時(shí)函數(shù)
入口參數(shù):uint16 x ,該值為1時(shí),延時(shí)1ms
返回值:無
***************************************/
void delay_ms(uint16 x)
{  
uint16 j,i;   
for(j=0;j<x;j++)   
{   
  for(i=0;i<1100;i++);   
}  
}

void PCAInit(void)
{
   P_SW1 &= 0xCF;
         CMOD=0x04; //設(shè)置PCA定時(shí)器
   CCON=0x00;
    AUXR|=0x80;
   TMOD&=0xF0;
   TL0=0x10;
   TH0=0xff;
         //定時(shí)器0開始計(jì)時(shí)
         CL=0;
         CH=0;
   
         CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
         CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
         CCAP0H=0x00; // PWM0初始時(shí)為0
     PCA_PWM0 &= 0x3F;       //PCA模塊0工作于8位PWM功能

   
         CR=1; //啟動(dòng)PCA定時(shí)器
}

/**************************************
功能描述:ADC口初始化
入口參數(shù):無
返回值:無
***************************************/
void ADC_config(void)
{
ADC_CONTR|=0x80;       //開AD轉(zhuǎn)換電源
delay_ms(10);           //適當(dāng)延時(shí)等待AD轉(zhuǎn)換供電穩(wěn)定
ADC_CONTR|=0x0E;     //選擇P0.6作為模擬功能AD使用
ADC_CONTR&=0xFE;     //選擇P0.6作為模擬功能AD使用

ADCCFG&=0xFC;             //AD轉(zhuǎn)換速度為96個(gè)時(shí)鐘周期轉(zhuǎn)換一次
ADCCFG|=0x0C;             //AD轉(zhuǎn)換速度為96個(gè)時(shí)鐘周期轉(zhuǎn)換一次
ADC_CONTR&=0xDF;          //清AD轉(zhuǎn)換完成標(biāo)志
  
EADC=0;                   //禁止ADC轉(zhuǎn)換中斷
ADCCFG|=0x20;             //ADC轉(zhuǎn)換結(jié)果ADC_RES存高4位,ADC_RESL存低8位
ADC_CONTR|=0x40;          //啟動(dòng)AD轉(zhuǎn)換,ADC_START=1
}
/**************************************
功能描述:ADC口檢測(cè)AD轉(zhuǎn)換值函數(shù)
入口參數(shù):無
返回值:ADC 12位數(shù)據(jù)
***************************************/
uint16 Get_ADC12bitResult(void)
{
uint16 AD_Dat=0;
   ADC_CONTR&=0xDF;       // 將ADC_FLAG清0
ADC_CONTR&=0xBF;        //關(guān)閉AD轉(zhuǎn)換,ADC_START=0
//12位AD結(jié)果的高4位放ADC_RES的低4位,低8位在ADC_RESL
AD_Dat = ADC_RES;         //將ADC_RES低4位移到應(yīng)在的第9位至第12位
AD_Dat <<= 8;
AD_Dat|= ADC_RESL;        //將ADC_RESL的8位移到應(yīng)在的低8位

   ADC_CONTR|=0x40;           //啟動(dòng)AD轉(zhuǎn)換,ADC_START=1
return AD_Dat;
}
void PWM0_set(unsigned char a)
{
  
if(a==0XFF)
{
PCA_PWM0=0X03;
}
else
{
PCA_PWM0=0x00;
CCAP0L=a;
CCAP0H=a;
}
}

void main (void)
{
    ADC_config();
       PCAInit(); //PWM初始化
       while(1)
       {         
  M=Get_ADC12bitResult ;   
        PWM0_set(M); //轉(zhuǎn)換結(jié)果為PWM0賦值 輸出占空比 ·
       }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:72649 發(fā)表于 2019-9-12 13:32 | 只看該作者
兩者沒有關(guān)聯(lián)吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:531986 發(fā)表于 2019-9-12 15:20 | 只看該作者
hjx5548 發(fā)表于 2019-9-12 13:32
兩者沒有關(guān)聯(lián)吧

有關(guān)聯(lián)啊,電位器轉(zhuǎn)化的結(jié)果賦值給PWM
回復(fù)

使用道具 舉報(bào)

地板
ID:275826 發(fā)表于 2019-9-12 18:13 | 只看該作者
AD轉(zhuǎn)換程序錯(cuò)誤,沒有轉(zhuǎn)換完成判斷
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2019-9-12 21:22 | 只看該作者
錯(cuò)誤多多,給你一個(gè)示例,自己對(duì)照查錯(cuò)。
  1. #include <STC8.H>
  2. #include "intrins.h"
  3. //測(cè)試工作頻率為11.0592MHz
  4. void main()
  5. {
  6.     CCON = 0x00;
  7.     CMOD = 0x08;           //PCA時(shí)鐘為系統(tǒng)時(shí)鐘
  8.     CL = 0x00;
  9.     CH = 0x00;
  10.     CCAPM0 = 0x42;    //PCA模塊0為PWM工作模式
  11.     PCA_PWM0 = 0x00;  //PCA模塊0輸出8位PWM
  12.     CCAP0L = 0xff;    //PWM占空比為50%[(40H-20H)/40H]
  13.     CCAP0H = 0xff;
  14.     CR = 1;           //啟動(dòng)PCA計(jì)時(shí)器

  15.     P1M0 = 0x00;     //設(shè)置P1.0為ADC口
  16.     P1M1 = 0x01;
  17.     ADCCFG = 0x0f;           //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16/16
  18.     ADC_CONTR = 0x80;  //使能ADC模塊

  19.     while (1)
  20.     {
  21.         ADC_CONTR |= 0x40; //啟動(dòng)AD轉(zhuǎn)換
  22.         _nop_();
  23.         _nop_();
  24.         while (!(ADC_CONTR & 0x20));//查詢ADC完成標(biāo)志
  25.         ADC_CONTR &= ~0x20;         //清完成標(biāo)志
  26.         CCAP0H = ADC_RES;           //讀取8位ADC結(jié)果控制PWM
  27.     }
  28. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

6#
ID:531986 發(fā)表于 2019-9-14 22:28 | 只看該作者
wulin 發(fā)表于 2019-9-12 21:22
錯(cuò)誤多多,給你一個(gè)示例,自己對(duì)照查錯(cuò)。

謝謝你,我學(xué)了2個(gè)月,很多問題,謝謝你們
回復(fù)

使用道具 舉報(bào)

7#
ID:531986 發(fā)表于 2019-9-14 22:29 | 只看該作者
tyrl800 發(fā)表于 2019-9-12 18:13
AD轉(zhuǎn)換程序錯(cuò)誤,沒有轉(zhuǎn)換完成判斷

謝謝你,我學(xué)了2個(gè)月,很多問題,謝謝你們
回復(fù)

使用道具 舉報(bào)

8#
ID:531986 發(fā)表于 2019-9-15 21:18 | 只看該作者
17851000590 發(fā)表于 2019-9-14 22:28
謝謝你,我學(xué)了2個(gè)月,很多問題,謝謝你們

大哥,你的電位器可以調(diào)節(jié)占空比,但是調(diào)節(jié)不了頻率,無法改變電機(jī)快慢
回復(fù)

使用道具 舉報(bào)

9#
ID:391730 發(fā)表于 2019-12-17 15:13 | 只看該作者
一個(gè)非常重要的問題:如何保證ADC采集的數(shù)據(jù)是你想要的數(shù)據(jù)。STC單片機(jī)的ADC只能采集到正電壓數(shù)據(jù),負(fù)電壓數(shù)據(jù)采不到。PWM是一個(gè)方波,在ADC采集的時(shí)候,不能保證采集點(diǎn)落在方波的哪個(gè)區(qū)間,所以哪怕是理想情況下,ADC采集的數(shù)據(jù)是每次都不一樣的。還有PWM和ADC頻率匹配的問題,以及l(fā)ayout時(shí)寄生電容電感引發(fā)的PWM波形畸變,致使ADC采集的數(shù)據(jù)更加的不準(zhǔn)確。最最重要的一點(diǎn),STC單片機(jī)不能并發(fā)運(yùn)行,也就是說,在ADC采集數(shù)據(jù)的時(shí)候,單片機(jī)此時(shí)已經(jīng)停止了PWM波的輸出,那么這個(gè)時(shí)候ADC采集到的只是由于電路的電容效應(yīng)殘留的電壓值,你說,ADC能采集的準(zhǔn)你想要的數(shù)據(jù)才怪!STC的單片機(jī)目前只能采集恒壓。。。。!
回復(fù)

使用道具 舉報(bào)

10#
ID:1093820 發(fā)表于 2023-12-22 09:11 | 只看該作者
個(gè)人意見,ADC采集數(shù)據(jù)時(shí),單片機(jī)應(yīng)禁止其他中斷響應(yīng),但沒有必要停止PWM波輸出吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表