久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5737|回復: 9
打印 上一主題 下一主題
收起左側

STC8單片機的ADC轉化結果去控制PWM頻率輸出,怎么沒反應啊

[復制鏈接]
跳轉到指定樓層
樓主
ID:531986 發表于 2019-9-12 10:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  
/********************************************************
        功能  :用電位器通過STC8AD片內AD和PWM控制電機轉速
        單片機;STC8AD
        晶振  :12M
        作者  :張駿杰
        時間  :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;

/**************************************
功能描述:延時函數
入口參數:uint16 x ,該值為1時,延時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; //設置PCA定時器
   CCON=0x00;
    AUXR|=0x80;
   TMOD&=0xF0;
   TL0=0x10;
   TH0=0xff;
         //定時器0開始計時
         CL=0;
         CH=0;
   
         CCAPM0=0x42; //PWM0設置PCA工作方式為PWM方式(0100 0010)
         CCAP0L=0x00; //設置PWM0初始值與CCAP0H相同
         CCAP0H=0x00; // PWM0初始時為0
     PCA_PWM0 &= 0x3F;       //PCA模塊0工作于8位PWM功能

   
         CR=1; //啟動PCA定時器
}

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

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

   ADC_CONTR|=0x40;           //啟動AD轉換,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); //轉換結果為PWM0賦值 輸出占空比 ·
       }
}

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

使用道具 舉報

沙發
ID:72649 發表于 2019-9-12 13:32 | 只看該作者
兩者沒有關聯吧
回復

使用道具 舉報

板凳
ID:531986 發表于 2019-9-12 15:20 | 只看該作者
hjx5548 發表于 2019-9-12 13:32
兩者沒有關聯吧

有關聯啊,電位器轉化的結果賦值給PWM
回復

使用道具 舉報

地板
ID:275826 發表于 2019-9-12 18:13 | 只看該作者
AD轉換程序錯誤,沒有轉換完成判斷
回復

使用道具 舉報

5#
ID:213173 發表于 2019-9-12 21:22 | 只看該作者
錯誤多多,給你一個示例,自己對照查錯。
  1. #include <STC8.H>
  2. #include "intrins.h"
  3. //測試工作頻率為11.0592MHz
  4. void main()
  5. {
  6.     CCON = 0x00;
  7.     CMOD = 0x08;           //PCA時鐘為系統時鐘
  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;           //啟動PCA計時器

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

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

使用道具 舉報

6#
ID:531986 發表于 2019-9-14 22:28 | 只看該作者
wulin 發表于 2019-9-12 21:22
錯誤多多,給你一個示例,自己對照查錯。

謝謝你,我學了2個月,很多問題,謝謝你們
回復

使用道具 舉報

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

謝謝你,我學了2個月,很多問題,謝謝你們
回復

使用道具 舉報

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

大哥,你的電位器可以調節占空比,但是調節不了頻率,無法改變電機快慢
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合九九 | 自拍亚洲 | 国产一区二区a | 亚洲www.| 一区视频 | 一级毛片视频在线 | 亚洲国产精品久久久久秋霞不卡 | 精品国产免费一区二区三区五区 | 色黄视频在线 | 国产高清在线精品 | 一区二区在线免费观看 | 中文字幕在线一 | 国产我和子的乱视频网站 | 亚洲欧美日韩高清 | 特黄视频 | 天堂色综合| 中文字幕一区二区三区精彩视频 | 日韩欧美在线观看 | 成人区精品一区二区婷婷 | 天天澡天天狠天天天做 | 亚洲精品视频在线播放 | 久久综合一区二区三区 | 麻豆久久久久 | 91精品国产91久久久久久最新 | 超碰免费在线 | 久草视频在线播放 | 懂色中文一区二区三区在线视频 | 伊人网站 | 日本久久精品视频 | 亚洲精品成人在线 | 日韩欧美精品一区 | 亚洲激情一区二区三区 | 神马久久久久久久久久 | 国产欧美三区 | 欧美精品一区久久 | 美女视频h | 乱码av午夜噜噜噜噜动漫 | 亚洲福利网 | 日韩在线小视频 | 久久久999精品 | 欧美a∨|