找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2749|回复: 0
打印 上一主题 下一主题
收起左侧

单片机ADC采集电位器的值控制定时器产生的PWM调节占空比和频率 程序分享

[复制链接]
跳转到指定楼层
楼主
ID:254747 发表于 2021-12-15 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在论坛问的问题比较多 也还是要贡献一些东西出来

首先我们需要弄清楚两个问题  
第一个问题  什么是占空比   
占空比是指在周期T时间段里面,高电平持续的时间与整个周期T的比值,称为占空比,公式 duty = high/T,用百分比的格式书写,如50% 60% 80%
第二个问题  什么是脉宽调制
脉宽调制也就是我们说的PWM调制,它和占空比类似,单位是时间单位;一般就是周期T减去高电平持续时间,剩下的就是低电平时间

本程序的占空调节方案就是按照脉宽的思路来写的,可以调节占空比和频率,并且调节频率的时候占空比不发生变化,调节占空比,频率不发生变化
只要周期T固定了那么频率就固定了根据公式T=1/F来计算得到的,

//3个电位器的值
RP1_GetADCResult()    表示ADC电位器的值
RP2_GetADCResult()    表示ADC电位器的值
RP3_GetADCResult()     表示ADC电位器的值

TEMER_COUNT    来自定时器的值 0.2MS变化一次 这样计算的精度会高一点

本程序在不同的频率下占空比误差在2%  个别频率下没有任何误差




void HUN_PIN_MODE()                                
{

      unsigned int  T_TIMER, Duty_Max;                                  //临时变量        周期时间变量和占空比最大时间变量
         
      PCA_PIN_LV_UPDETE(RP1_GetADCResult());                 //启动设置单频 0-255HZ
        
        
      RP2_ADC_MAX = RP2_GetADCResult()/40;                    //限制电位器ADC最大值 本模块为25  1023/40取整为25
                                                                                                                                                                                                                                                                                                                                       //2号电位器在本函数中显示的位副频,频率25hz
                        
        
                        
        
           T_TIMER = 1000/RP2_ADC_MAX;                            //设置副频频率 这里的1000是表示1000MS    也就是周期T  固定周期T也就固定了频率
        
           //这句目的是保持占空比在任意频率下保持不变
            Duty_Max = (RP3_GetADCResult()/(1023/T_TIMER))*0.8;    //让脉宽时间跟随电位器值 来匹配合适的缩小倍率
                                                                                                  //保证电位器旋转最小到最大都是均匀分布调节占空
                                                                                                  //比值的大小
                                                                                                  //乘以0.8表示将占空比最大限制在80%
                                                                                                  //在本函数中 Duty_Max用来标定占空比的大小
            //占空比转换 并且显示到数码管    *100是将数据先放大100倍在计算
            RP3_ADC_MAX = Duty_Max*100/T_TIMER;                         //把三号电位器的值保存到公共变量里面方便在
                                                                                                   //不同模块传入不同的数据更新到数码管上面
                                                                                                                                                                                                                                                                                                                         /本函数中3号电位器直接显示占空比值到数码管
        
        
                 if(TEMER_COUNT < Duty_Max)                                      //脉宽高电平持续时间设置  也就是调节占空比大小
                                 {                        
                                                 CR = 1;                                       //启动PWM模块
//                                                 LED = 1;                                            //混频指示   取消这个指示 改为一直显示
                                 }
                  else
                                 {                                                                 //如果高电平持续时间没有结束 就将CR置0关闭PWM
                                                 CR = 0;                                       //关闭PWM 模块
//                                                 LED = 0;                                           //波形指示灯
                                 }
                 if(TEMER_COUNT >= T_TIMER )                                    //判断脉宽是不是持续到了最大值
                                 {
                                                        TEMER_COUNT = 0;                   //到了就将TEMER_COUNT清零
                                         
                                 }
               
}





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表