单片机高低电平pwm设置中,电压,占空比,与高低电平之间的关系,总是绕不清,求大神解答

正在初始化报价器单片机产生pwm信号的方法是什么?不方便听原理是当输出频率一定时,输出电压与高电平的占空比成正比,即PWM每个周期中高电平脉宽越宽输出电压越高。
单片机使用方法是
1.设置定时器的工作模式为PWM和输出引脚;
2.设置定时器的工作频率或PWM的频率;
3.当需要改变输出电压时修改脉宽参数即可
查看更多更多回答永恒哥78硯涭如果单片机有PWM的话,就直接使用PWM信号输出,只要设置要对应的pwm周期和占空比就可以了。如果没有PWM,可以用IO模拟一个PWM信号。如果PWM要求频率比较快的话,你要算一下单片机的速度是否够快。
奥迪之旅你好,在电机调速等方面,PWM应用是最广泛的,而用标准的51单片机内部没有PMW模块,只得用软件来产生PWM信号,这样就得用51单片机的定时器来完成,而在中档PIC单片机中由于内置了两个CCP模块,因此可以用它来同时产生两路PWM信号,只要设置好相应的PWM周期、脉宽和CCP模块的初始化,CCP模块就自动产生PWM信号从RC1和RC2引脚输出。
为你推荐热门问答1234567891011121314151617181920查看更多21222324252627282930【已解决,fuck,脑残了】请教下各位大神关于51单片机读取占空比的问题|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
[attachment=4443872]&&&&------------------是我自己脑残了最近又在做些小玩意,需要检测接收机PWM信号的占空比,周期是20ms,高电平时长是1ms到2ms之间,1ms左右时打开某个开关,2ms左右时关闭某个开关,我想了一种检测方法,但是这种方法为什么在单片机上就行不通呢?理论上来说是可以行得通的。。。从逻辑上来讲。。。sbit input=P1^7;sbit LED=P1^6;char CS,ZT;//定时器初始化函数略void Time0_Int() interrupt 1&&&&&&{ && TH0&&= 0&& TL0&&= 0&&&&&&&&&&&&&&&&&& //33MHZ 0.1ms&& && if(input==1)&& {&& CS++;&& }&& if(input==0&&CS&0)&& {&&&& if(CS&15)&&&&&&&&//大于15个0.1ms即大于1.5ms&&&& {&&&&&&ZT=1;&&//主循环中有(if ZT=1,开关关闭,else,开关开启)&&&&&&LED=1;&&&& }&&&& if(CS&15)&&&& {&&&&&&ZT=0;&&&&&&LED=0;&&&& }&&&& CS=0;&& }} 这段程序烧进去后input接接收机信号输出端,用示波器看信号的确是在1ms至2ms高电平之间变动,但是灯就是一直亮,不熄灭。请问下各位我这种计时方式有错吗?
赞助商链接
用T2EX的捕获模式吧,测得宽度的还准确
赞助商链接
:用T2EX的捕获模式吧,测得宽度的还准确( 09:13)嬀/color]哥,我想知道我这样计时错在哪里,知其错才能不再错。
还有,在us级的中断时要考虑到调用中断程序时的出入堆栈的时间了,试试把15改成13看看
:还有,在us级的中断时要考虑到调用中断程序时的出入堆栈的时间了,试试把15改成13看看( 09:19)嬀/color]谢谢你了,我等下去实验室测试一下,其他大神如果有什么高见麻烦别藏着掖着,不管对错都说一下吧,取别人之长,补自己之短不对啊,那个占空比是在1ms-2ms之间变动,理论上来说临界值是10和20啊,取13和15不是一回事吗?
还有一个问题,这里用2个if,分别做&15,&15判断,如果恰好是15呢?写程序要严谨些,不如用if()   else,除非你准备将15忽略
水平有限,中断程序没有发现什么问题,会不会是主程序中的问题?
代码我贴出来吧:#include &STC15F2K60S2.H&sbit input1=P3^7;sbit input2=P3^6;sbit input3=P3^5;sbit input4=P3^4;sbit output1=P1^0;sbit output2=P1^1;sbit output3=P4^7;sbit output4=P1^2;sbit input=P1^6;sbit YM=P1^3;sbit LED=P4^0;char CS,ZT,i;void Time0_Init();void Delay(unsigned int s);void Delay(unsigned int s){&&&&&&&&for(i=0; i&s; i++);&&&&for(i=0; i&s; i++);} void Time0_Init()&&&&&&&&&&&&{TMOD = 0x01;&&&&&&&&&&&&&&&&&&&&IE&& = 0x82;TH0&&= 0TL0&&= 0&&&&&&&&&&&&&&&&TR0=1;&&&&&&&&&&&&&&&&&&&&}void main(){P4SW=0x70;LED=0;Time0_Init(); while(1) {&& if(ZT=0)&& {&&&&output1=input1;&&&&output2=input2;&&&&output3=input3;&&&&output4=input4;&& }&& if(ZT=1)&& {&&&&output1=YM;&&&&output2=YM;&&&&output3=YM;&&&&output4=YM;&& } }}void Time0_Int() interrupt 1&&&&&&{ && TH0&&= 0&& TL0&&= 0&&&&&&&&&&&&&&&&&& //0.1us&& && if(input==1)&& {&& CS++;&& }&& if(input==0&&CS&0)&& {&&&& if(CS&15)&&&& {&&&&&&ZT=1;&&&&&&LED=1;&&&& }&&&& if(CS&15)&&&& {&&&&&&ZT=0;&&&&&&LED=0;&&&& }&&&& CS=0;&& }} 以上是程序的代码,我主要是根据灯的变化来看是否正常工作的。我确定那个定时的时间是0.1ms以及中断程序是工作的,输入信号用示波器看的确是1ms到2ms变动
[attachment=4443120]这个是用软件算出来的定时器时间
是不是信号频率太高造成频繁动作,造成灯一直亮的假象?如果实在没法解决,不妨将CS送显示看看
LZ,你确定你的眼睛足够快吗??要知道1秒=1000ms你的灯是20ms刷新一次状态吗??内容比较长,我没看的很仔细
这可是至少50Hz的闪烁频率~~~~~
哥,我用示波器看过的,分析了下就是我这种计时方式有错,导致单片机不正常工作。
我给大家说下航模接收机输出的信号吧,航模接收机输出的是20ms为周期的PWM信号,其中占空比在1ms到2ms之间变动,我设置成要么占空比1ms,要么2ms,分别代表两种状态,我需要检测信号到底是哪种状态,以此来控制关闭打开LED
思路没有问题,估计是信号变化太快眼睛响应不过来
哥,不是眼睛反应不过来,麻烦仔细看下程序,如果占空比是1ms,或者2ms,LED状态就是亮和灭,不会闪烁的,LED要么一直是亮,要么一直是灭,不会闪烁
:哥,不是眼睛反应不过来,麻烦仔细看下程序,如果占空比是1ms,或者2ms,LED状态就是亮和灭,不会闪烁的,LED要么一直是亮,要么一直是灭,不会闪烁 ( 09:58) 信号用示波看稳定不??是一直1ms或一直是2ms吗??
用示波器不如用逻辑分析仪采集一定时间的信号
占空比绝对稳定,只在1ms和2ms这两个值切换,输出的都是方波,几乎没有波纹。航模接收机输出的信号绝对靠谱,连这都不靠谱航模还咋玩?
1.你用什么办法验证过你的定时器中断是100us。2.编程出现漏洞,等于15时怎么办?3.你的执行部份是否需要ms级的速度,如果不是,为何不采用累计方式来消除采集误差或抖动?比如只有连续收到100次大于1.7ms的信号时才会执行2ms的控制,只有再次收到100次小于1.3ms的信号时才会执行1ms的控制,中间值做无效信号处理。
关键是1ms与2ms信号转变的速度,太快的话眼睛是看不出来灯的变化的,要分辨起码要间隔200ms以上
哥,谢谢你一直在回答,但是能先仔细读一遍程序吗?灯的变化太快?程序中好像没有这么写吧?灯的变化是程序根据信号宽度进行的,不需要人为控制,我不清楚航模输出信号的变化频率,因此只是猜测。建议用示波器看下
你没有停止计数器计时吧
真没注意到这点,在C语法中,if(A=b)的形式是允许的,先将b赋值给A再判断真假,结果就是前一个if语句永远不成立,后一个永远成立。为了省事,我经常这样写if(A)&&&&elseif(!A)&& else
查看完整版本: [--
Powered by
Time 0.168393 second(s),query:5 Gzip enabledPWM占空比和分辨率
占空比是接通时间与周期之比
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同
占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比,如一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。
分辨率:也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率),16位的的PWM理论就是1:65535(单斜率)。
频率就是这样的:如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80.......,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。
双斜率 / 单斜率:
假设一个PWM从0计数到80,之后又从0计数到80.......这个就是单斜率
假设一个PWM从0计数到80,之后是从80计数到0.......这个就是双斜率
可见,双斜率的计数时间多了一倍,所以输出的PWM频率就慢了一半,但是分辨率却是1:(80+80) =1:160,就是提高了一倍。
pwm 也就是模拟方式稳定输出,通过调节pwm的占空比(分辨率),和周期调节电压电流大小。占空比是接通时间与周期之比
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同
占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比,如一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。
分辨率:也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率),16位的的PWM理论就是1:65535(单斜率)。
频率就是这样的:如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80.......,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。
双斜率 / 单斜率:
假设一个PWM从0计数到80,之后又从0计数到80.......这个就是单斜率
假设一个PWM从0计数到80,之后是从80计数到0.......这个就是双斜率
可见,双斜率的计数时间多了一倍,所以输出的PWM频率就慢了一半,但是分辨率却是1:(80+80) =1:160,就是提高了一倍。
pwm 也就是模拟方式稳定输出,通过调节pwm的占空比(分辨率),和周期调节电压电流大小。
没有更多推荐了,PC4输入一个pwm波,请问各位大侠,TP11电压与pc4的占空比之间的关系怎么算?假设pc4峰值时a伏_百度知道
PC4输入一个pwm波,请问各位大侠,TP11电压与pc4的占空比之间的关系怎么算?假设pc4峰值时a伏
我有更好的答案
当成滤波算就行了,问题是右侧还有负载就不能算了.为什么不直接送tp11呢?如果是电压问题用电阻分压就行了啊.
因为右边是一个运放比较器,运放另一端的电压是会变的,pc4是根据它的变化输出不同的占空的电压,滤波后就可以稳定在某个我想要的电压值,大神能不能给个你认为可行的计算方法?我可以实际测量看看是否是我想要的。谢谢啦
理想情况就是电压的占空比分度值,这是在没有任何负载时.
我明白了,其实右边是运放,运放的输入阻抗是很大的,所以可以看做理想来计算,然后根据实际来输出相应的占空比。谢谢啦!
运放阻抗是很大,你的47K电阻也不小啊,这个相当于输出阻抗.
采纳率:60%
为您推荐:
其他类似问题
占空比的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。,用STC12C5A60S单片机PWM口,能否设置PWM口刚开始输出时是高低平还是低电平!刚学单片机求高手指点_百度知道
,用STC12C5A60S单片机PWM口,能否设置PWM口刚开始输出时是高低平还是低电平!刚学单片机求高手指点
我有更好的答案
认真看看手册就会知道咋弄了,对于STC硬件PWM的脉宽调节,其实就是一个为寄存器CCAPxL和CCAPxH赋值的过程,根据你希望的输出脉宽,在主函数下主循环前初始化一下,或者说为他们赋值一次,当程序进入主循环运行时,PWM输出状态就是你想要的了,而后再怎样调节就是你的事情了。
采纳率:79%
首先你要知道pwm的原理做pwm才好比如让led是先慢慢的亮 还是先慢慢灭都可以弄的我没用过stc的单片机
但这个型号有pwm功能你到stc官网上下载对应的规格书上面有例子参考下就行了
本回答被网友采纳
STC系列单片机,有多数 型号 具有 PWM 功能,STC12C5A60S单片机 可以设置 两路 PWM输出, PWM 输出功能 可以 设置成 始终
低电平 或 高电平 ( 0% 或者 100% )
可以设置 占空比 从 1 ~ 255 个等级 ( 即 0.39% 一个等级 从 0% ~ 100% )
你好,也就是可以设置PWM口刚开始输出时是高低平还是低电平,我需要用STC12C5A60S单片机的两路PWM波产生两路这样的波形!信号要一反一正。谢谢
这种信号 用个定时器就可以产生,不同定时时间 产生不同频率,两个 IO 口反相输出就是。
谢了,我需要的频率比较高,很浪费单片机的资源!
本回答被提问者采纳
为您推荐:
其他类似问题
您可能关注的内容
低电平的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 单片机检测高低电平 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信