【STC单片机】通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值

127 篇文章 313 订阅 ¥9.90 ¥99.00

【STC单片机】通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值


本示例演示基于STC15W408AS单片机,采用自制开发板,使用的是外部晶振16MHz。

这篇文章涉及了综合知识的运用。写这一篇文章的初衷是昨天睡觉前的想法,做一个外部可控可调的PWM输出的功能。今天将其程序整理出来并且验证了这一点。

注意:ADC输入引脚不能浮空,不然PWM输出将会是跳动的脉动输出。占空比将是一个随机的状态形式输出。

  • 功能实现内容:占空比可调,但是频率是固定的2.6666KHz的。如需调整频率,需要修改想要的宏定义的参数。

f=MAIN_Fosc /PWM_DUTY

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的示例程序,可以实现STC8A8K64D4通过串口输入控制PWM占空比来调整输出电压: ```c #include <STC8.H> #define BAUDRATE 9600 // 串口特率 #define PWM_FREQ 10000 // PWM频率 #define PWM_MAX_DUTY 200 // PWM最大占空比 void initPWM(void); void initUART(void); void setPWM(uint16_t duty); void main(void) { initPWM(); // 初始化PWM initUART(); // 初始化串口 while (1) { if (RI) // 如果有数据接收 { uint16_t duty = SBUF; // 读取占空比数据 setPWM(duty); // 设置PWM占空比 RI = 0; // 清除接收标志位 } } } // 初始化PWM void initPWM(void) { P_SW2 |= 0x80; // 将PWM1映射到P3.4 PWM_CR = 0x80; // 使能PWM时钟 PWM_CPR = FOSC / (PWM_FREQ * 256); // 设置PWM周期 PWM1_PDRH = (PWM_MAX_DUTY >> 8) & 0xFF; // 设置PWM最大占空比 PWM1_PDRL = PWM_MAX_DUTY & 0xFF; PWM1_CTRL = 0x8E; // 启用PWM输出 } // 初始化串口 void initUART(void) { PCON |= 0x80; // SMOD=1,特率加倍 SCON = 0x50; // 8位数据,无校验,1位停止位,串口模式1 TMOD &= 0x0F; // 配置计数器1为模式2 TMOD |= 0x20; TH1 = 256 - FOSC / (BAUDRATE * 12 * 32); // 计算特率计数器初 TL1 = TH1; TR1 = 1; // 启动计数器1 ES = 1; // 使能串口中断 EA = 1; // 使能总中断 } // 设置PWM占空比 void setPWM(uint16_t duty) { if (duty > PWM_MAX_DUTY) // 占空比不得大于最大 duty = PWM_MAX_DUTY; PWM1_DTH = (duty >> 8) & 0xFF; PWM1_DTL = duty & 0xFF; } ``` 这个程序将串口设置为接收模式,等待接收占空比数据。每次接收到数据后,就将其作为PWM占空比设置到PWM控制器中,从而实现调整输出电压的目的。需要注意的是,这个程序只是一个简单的示例,实际应用中需要根据具体的需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值