linux 普通io实现pwm,普通的IO口为什么可以模拟PWM信号?

通过单片机定时器中断实现软件模拟而非硬件模块实现的pwm。

具体的流程如下:

1.根据产品功能分析需要的pwm功能的频率,以及占空比可以调节的档位数。

比如对led进行调光,为了让人眼不感觉到闪烁,我们选择100Hz的频率,根据功能我们要提供10档的亮度调节。

2.根据公式pwm/档位数得到定时器的中断频率,以1中提到的例子,定时器中断周期=1/100/10s=1ms。

3.将定时器的中断周期设置为2所计算出的周期,定义两个全局变量,一个对中断次数进行计数。

在定时器中断中,计算变量a++,当变量大于等于档位数时,变量a清零,同时io口置高,当变量a大于变量b时,io口置低。

需要注意的是,输出的占空比会抖动,原因是程序中断保护现场花费的时间每次进出中断都有偏差,主程序为了做变量访问互斥可能会关闭中断,这里也会导致偏差,另外当有多个中断时,特别是同级以及更高优先级的中断不能打断,当定时器中断到来时,必须要等待其他同优先级正在执行的中断执行完成,也会导致偏差。

所以必须计算所有这些导致的偏差,特别要注意要把所有同优先级以及更高优先级的中断的执行时间,评估总的偏差是否会影响功能,比如led会不会闪烁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值