怎样用CC2541对PWM波的脉冲占空比连续改变实现连续控制

一个PWM波占空比控制输出电压的电路,没有太看懂_百度知道
一个PWM波占空比控制输出电压的电路,没有太看懂
电路是下面的图,最左端连线是稳定的电平输出。 C21是做什么用的? 33K的电阻只是限流控制静态工作点的么? C20是滤波?谁详细跟我讲下这个怎么从PWM波变成一个稳定的0~5V之间某一电压的输出?(PWM
我有更好的答案
21是积分电容。可惜的是,这个明显是个简易的电路,三极管没有稳定的工作点,且存在截至区,输出电压是不可能稳定的,使得PWM波形转换成直流,经三极管放大
采纳率:39%
C20是滤波除杂防抖动,三极管把电压拉升上去的,pwm只是三极管开关电压信号!
为您推荐:
其他类似问题
您可能关注的内容
占空比的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 5366|回复: 21
用STM32的定时器3PWM输出四路不同占空比的波形,怎样随时控制开始和停止,并设定输出脉冲波的个数
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
用TIM3输出四路波形,想要预先设定输出的脉冲个数。PWM频率为8Khz,比如通道一输出100个脉冲停止然后输出通道二,通道二输出200个然后停止输出通道三,以此类推。
该怎么实现呢?
另外我简单尝试了一下,两路输出,不计算脉冲数目看能否实现关停,使用函数&TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);,但无效。。
请教各位大神指点迷津。
主题帖子精华
金钱123091
在线时间1019 小时
回复【楼主位】超哥nb:
---------------------------------
关闭,用这种:
TIM3-&CCER&=~(1&&4);&&& //OC2&输出关闭
统计脉冲,可以用定时器的门控模式.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【2楼】正点原子:
---------------------------------
我写了程序是这样的
在main()中
&&&&&&&&&&&&&&&&&&ch1_open();
&&delay_ms(1000);
&&ch2_open();
&&delay_ms(1000);
&&ch3_open();
&&delay_ms(1000);
&&ch4_open();
&&delay_ms(1000);
在timer.c中添加了
//开启通道一,同时关闭通道二三四
&void&ch1_open(void)
TIM3-&CCER|=(1&&1);
TIM3-&CCER&=~(1&&4);
TIM3-&CCER&=~(1&&8);
TIM3-&CCER&=~(1&&12);
&&}
//开启通道二,同时关闭通道一三四
void&ch2_open(void)
TIM3-&CCER&=~(1&&1);
TIM3-&CCER|=(1&&4);
TIM3-&CCER&=~(1&&8);
TIM3-&CCER&=~(1&&12);
&}
//开启通道三,同时关闭通道一二四
void&ch3_open(void)
TIM3-&CCER&=~(1&&1);
TIM3-&CCER&=~(1&&4);
TIM3-&CCER|=(1&&8);
TIM3-&CCER&=~(1&&12);
&}
//开启通道四,同时关闭通道一二三
void&ch4_open(void)
TIM3-&CCER&=~(1&&1);
TIM3-&CCER&=~(1&&4);
TIM3-&CCER&=~(1&&8);
TIM3-&CCER|=(1&&12);
&}
能实现关断,但是时间并不对,按照设想应该是每个通道输出持续一秒然后开始下一个通道,关停四秒,但时间上并不是这样,这样写程序有问题吗?原子大哥
主题帖子精华
金钱123091
在线时间1019 小时
你测试是怎样的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
每一个通道的波形都是交替一秒出现和停止,正确的应该是间隔四秒出现一次,持续一秒吧
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
原子哥,另外,要想实现预先设定输出脉冲个数的话,shibushixuyao再用一个定时器?
主题帖子精华
金钱123091
在线时间1019 小时
回复【5楼】超哥nb:
---------------------------------
我看你这代码没问题啊,呵呵
你仿真看看CCER寄存器是不是正确的值?
回复【6楼】超哥nb:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【7楼】正点原子:
---------------------------------
对定时器门控模式始终没完全弄懂,如果是统计四路输出的脉冲数的话,只添加一个定时器可以吗?还是要用四个来设定?有相应代码吗?
谢谢原子哥
主题帖子精华
金钱123091
在线时间1019 小时
回复【8楼】超哥nb:
---------------------------------
一个定时器输出4路PWM,你是频率相同么?
频率相同就可以,但是四路的脉冲数是一样的。
说白了门控模式就是一个定时器,去控制另外一个定时器的时钟,开启或者关闭,从而控制PWM波形的个数。
所以这个被控制的定时器的4路PWM必定是一样的波形数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【9楼】正点原子:
---------------------------------
频率是相同的,但是四路脉冲数不同,所以这样的话是不是需要多个定时器了?
有没有更简单的办法呢?假如我的频率是10KHz,第一路输出100个脉冲,那时间就是100*(1/10000),即10ms,就让它输出这个时间然后再开始第二路,以此类推,这样的做话输出的脉冲数准确吗?因为不知道怎么通过仿真统计脉冲数,所以不知道结果如何,个人觉得应该不太准确。尤其是频率更高时候。
另外:实验九例程中TIM_PWM_Init(899,0);//不分频,PWM频率=Khz,是不是有问题呢&&不是80K吗?还是我理解有误
主题帖子精华
金钱123091
在线时间1019 小时
回复【10楼】超哥nb:
---------------------------------
分时复用的话,没问题,你可以一路输出完了,再去搞另外一路.
是很准的,这个我测试过.
至于例程这个确实注释有误.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【11楼】正点原子:
---------------------------------
但是Khz这是没有错的啊&,就是72Mhz除以(899+1)对吧,如果8Khz也没错,那是我理解的不对吗?
主题帖子精华
金钱123091
在线时间1019 小时
回复【12楼】超哥nb:
---------------------------------
我说是我的备注有误,实际是80Khz,被我备注成8Khz了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【13楼】正点原子:
---------------------------------
好的,谢谢原子哥了
主题帖子精华
新手入门, 积分 132, 距离下一级还需 -112 积分
在线时间2 小时
回复【9楼】正点原子:
---------------------------------
原子哥,有门控模式的例子吗?我要统计五路输出的脉冲数,频率不同,怎么办啊?
主题帖子精华
金钱123091
在线时间1019 小时
我在论坛发过了。
你搜索下,不过你要5路,不好做了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【2楼】正点原子:
-------------------------
原子哥ADC那个例程中如果想要在不解外部电压时液晶屏显示时数为0,而不是在3V左右跳变,该怎么做,我把VDDA和REF+之间跳线帽拿掉不起作用,ADC和TPAD之间跳线帽拿掉也不起作用
主题帖子精华
金钱123091
在线时间1019 小时
回复【17楼】超哥nb:
---------------------------------
接100K的下拉电阻到GND。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 62, 距离下一级还需 138 积分
在线时间0 小时
回复【18楼】正点原子:
---------------------------------
这个。。要怎么接呢?不太会啊
主题帖子精华
金钱123091
在线时间1019 小时
回复【19楼】超哥nb:
---------------------------------
找个懂电路的帮你下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手入门, 积分 132, 距离下一级还需 -112 积分
在线时间2 小时
回复【11楼】正点原子:
---------------------------------
原子哥,如果将【8楼】所说的这种用delay()来控制脉冲数的方法用于多线程的UCOSII环境中还准确吗?
主题帖子精华
金钱123091
在线时间1019 小时
回复【21楼】SSSA:
---------------------------------
你可以用定时器。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
Powered by按键控制PWM波程序
> 按键控制PWM波程序
按键控制PWM波程序
//*******************************************************************************// Description: //通过按键改变PWM波的占空比,并用LCD1602// 显示大致的占空比。按键短按一次加减1次,长按连续加减。// 此程序用于恒流电路的测试。//******************************************************************************//main.c本文引用地址:#include#include#include"pwm.h"#include"key.h"#include"lcd1602.h"__CONFIG(0x3739);uchar Keyval = 0;/*------------------------*/void Init_port();void Key_Process();/*-------- 主函数--------*/void main(void){INTCON =0x00; //关总中断PIE1=0;Init_port();Init_LCD() ; Init_PWM(); GIE=1; //开总中断,使能所以高优先级中断 while(1){ Key_Process();}}/*============================================函数名称:Init_port功 能:初始化I/O端口参 数:无返回值 :无==============================================*/void Init_port(){ OPTION=0; ADCON1=0X07; //设置A口为普通I/O口TRISA=0x00; //控制口A设为输出状态 TRISD = 0X00; //数据口为输出状态 PORTD = 0; TRISC = 0XF0; //设置RC0~RC3为输CHU状态,RC4~RC7为输RUPORTC = 0;//定义按键端口 TRISB=0X1F; //设置B口低5位为输入}/*******************************************函数名称:Key_Process功 能:根据按键值执行任务参 数:无返回值 :无********************************************/void Key_Process(){ static uchar CNT=0; static uchar CNT1=5; keyvalue = Key_Scan(); Keyval = 0; if(keyvalue == 1) //占空比加1% { CCPR1L += 0x02; CNT++; if(CNT>9) { CNT1++; CNT=0; } Disp1Char(8,0,CNT1+0x30); Disp1Char(9,0,CNT+0x30) ; } if(keyvalue == 2) //占空比减1% { CCPR1L -= 0x02; CNT--; Disp1Char(8,0,CNT1+0x30); Disp1Char(9,0,CNT+0x30) ; if(CNT==0) { CNT1--; CNT = 0x0a; } }}//key.h#include#include#define uchar unsigned char#define keyin (PORTB&0x1f)//------------------------------------------------//延时程序void delay40ms() //延时程序{ int i,j; //定义整形变量 for(i=10;i>0;i--) { for(j=1000;j>0;j--);}}//------------------------------------------------//按键扫描程序uchar Key_Scan(){ extern uchar K //初始化按键扫描结果,无按键按下时的结果 if( keyin != 0x1f ) { delay40ms(); if( keyin != 0x1f) { if(RB0==0) //判断B0是否按下 Keyval=1; if(RB1==0) //判断B1是否按下 Keyval=2; if(RB2==0) //判断B2是否按下 Keyval=3; if(RB3==0) //判断B3是否按下 Keyval=4; if(RB4==0) //判断B4是否按下 Keyval=5; } } return K}//pwm.h#include#include/*============================================函数名称:Init_PWM功 能:初始化定时器A,产生PWM波参 数:无返回值 :无==============================================*/void Init_PWM(){ PR2=0 //PWM Period=(PR2+1)*4*Tosc*(TMR2前分频值) //占空比50% CCPR1L=0x7f; CCP1CON = 0x2C; //CCP1模块为PWM工作方式 TRISC = 0xF0; //设置RC2为输出 T2CON = 0x04; //打开TMR2,且使其前分频为1,同时开始输出PWM波形 CCP1IE =0; //CCP1中断禁止}//lcd1602.h#include#include#define uint unsigned int#define uchar unsigned char//定义MCU与LCD的接口/**************宏定义***************/#define Busy 0x80#define CLR_RS RA1=0 //RS = RA1#define SET_RS RA1=1#define CLR_RW RA2=0 //RW = RA2#define SET_RW RA2=1#define CLR_EN RA3=0 //EN = RA3#define SET_EN RA3=1/*******************************************函数名称:Delayus功 能:延时Nus参 数:无返回值 :无********************************************//*void Delayus(uint N){ while (N != 0) { N--; }}*//*******************************************函数名称:WaitForEnable功 能:等待1602液晶完成内部操作参 数:无返回值 :无********************************************/void WaitForEnable(void){ TRISD=0XFF; //将PORTD口切换为输入状态 CLR_RS; SET_RW; asm("nop"); SET_EN;asm("nop");asm("nop");
while((PORTD & Busy)!=0); //检测忙标志 CLR_EN; TRISD=0X00; //将PORTD口切换为输出状态}/*******************************************函数名称:write_cmd功 能:向液晶模块写入命令参 数:com--命令,返回值 :无********************************************/void write_cmd(unsigned char com){ WaitForEnable(); //等待液晶不忙 CLR_RS ; //RS=0,RW=0,写指令 CLR_RW;asm("nop"); PORTD = asm("nop"); SET_EN ; asm("nop");asm("nop"); CLR_EN;}/*******************************************函数名称:write_data功 能:向液晶显示的当前地址写入显示数据参 数:data--显示字符数据返回值 :无********************************************/void write_data(unsigned char data){ WaitForEnable(); //等待液晶不忙 SET_RS; //RS=1,RW=0,写数据 CLR_RW; asm("nop"); PORTD =asm("nop"); SET_EN ; //产生负脉冲 asm("nop");asm("nop"); CLR_EN ;}/*============================================函数名称:Init_LCD功 能:初始化液晶参 数:无返回值 :无==============================================*/void Init_LCD(){ write_cmd(0x38); //规定的复位操作 asm("nop");asm("nop"); write_cmd(0x38); asm("nop");asm("nop"); write_cmd(0x38); asm("nop");asm("nop"); write_cmd(0x38);//16&2显示,5&7点阵,8位数据接口 write_cmd(0x08);//关闭显示 write_cmd(0x01);//清屏,数据指针=0,所有显示=0 write_cmd(0x06);//读或写一个字符后地址指针加1 &光标加1,整屏显示不移动 write_cmd(0x0c);//开显示, 关光标,光标所在位置的字符不闪烁}/*******************************************函数名称:LocateXY功 能:向液晶写入显示字符位置的坐标信息参 数:x--位置的列坐标 y--位置的行坐标返回值 :无********************************************/void LocateXY(uchar x,uchar y){ temp = x&0x0f; y &= 0x01; if(y) temp |= 0x40; //如果在第2行 temp |= 0x80; write_cmd(temp);}/*******************************************函数名称:Disp1Char功 能:在某个位置显示一个字符参 数:x--位置的列坐标 y--位置的行坐标 data--显示的字符数据返回值 :无********************************************/void Disp1Char(uchar x,uchar y,uchar data){ LocateXY( x, y ); write_data( data );}/***********************************************函数名称:DispStr功 能:让液晶从某个位置起连续显示一个字符串参 数:x--位置的列坐标 y--位置的行坐标 ptr--指向字符串存放位置的指针返回值 :无***********************************************/void DispStr(uchar x,uchar y,uchar *ptr){ uchar * uchar i,n = 0; temp = while(*ptr++ != \0) n++; //计算字符串有效字符的个数 for (i=0;i<n;i++) { Disp1Char(x++,y,temp[i]); if (x == 0x0f) { x = 0; y ^= 1; } }}/*******************************************函数名称:DispNchar功 能:让液晶从某个位置起连续显示N个字符参 数:x--位置的列坐标 y--位置的行坐标 n--字符个数 ptr--指向字符存放位置的指针返回值 :无********************************************/void DispNChar(uchar x,uchar y, uchar n,uchar *ptr){ for (i=0;i<n;i++) { Disp1Char(x++,y,ptr[i]); if (x == 0x0f) { x = 0; y ^= 1; } }}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一怎样将0-10v的直流电压信号转变为占空比可调的PWM波?
<span class="xi1" style="color:#ff
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 15:50:34
怎样将0-10v的直流电压信号转变为占空比可调的PWM波?要求0-10v与占空比0%-100%成正比,电路越简单越好。
想做个LED调光电路。
大家只能给个方向,你自己实践可行性来验证
还有一种方法:你去市面上买个回来,分析人家是怎么做的,现在有用NE555+LM393做的,也有用单片机做的
|Grove离线LV8副总工程师积分:4669|主题:6|帖子:1885积分:4669LV8副总工程师 17:34:54&你要用这个来调光? ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 11:44:45&确实
LED调光 ||fairchild离线LV6高级工程师积分:1141|主题:34|帖子:522积分:1141LV6高级工程师 18:08:52&您看这样是否可行,
一个幅值为10V的锯齿波,
与直流电压信号通过一个比较电路,
即可调制出这个PWM信号。 ||星宇在线LV7版主积分:9564|主题:24|帖子:3351积分:9564版主 18:15:16&我觉的楼上的方法可行! ||
powercheyne离线LV6高级工程师积分:1277|主题:72|帖子:449积分:1277LV6高级工程师 20:02:29&大师,很麻烦啊,要产生三角波,要用比较器,搭一堆电路.何不找个IC一下搞定? ||
Grove离线LV8副总工程师积分:4669|主题:6|帖子:1885积分:4669LV8副总工程师 20:58:46&为何非用PWM来调呢? 这个本来就太复杂了.& 有很多方法可以得到0-10V的,比如说8个脚的PIC单片机, 频率电压转换器... ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 11:46:33&PWM调光线性好 ||
朴华离线LV8副总工程师积分:3088|主题:38|帖子:1254积分:3088LV8副总工程师 22:36:39&赞,确实,这个比较实在 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 11:45:34&能具体给个电路图吗? ||
YTDFWANGWEI离线LV7版主积分:95406|主题:137|帖子:42826积分:95406版主 08:47:50&把产品帮你做出来好了,人心不足蛇吞象啊。。。。。。 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 09:23:04&只怪自己太差了,只好请教各位了。 ||
YTDFWANGWEI离线LV7版主积分:95406|主题:137|帖子:42826积分:95406版主 09:49:56&1、三角波能能不能产生?不会去百度,实在不行你找个控制IC用他的震荡端。
2、没有0-10V幅度的三角波?你不能找个0-1的三角波然后将0-10V分压成0-1V?
3、别人给你指明了路,你自己不去试试,这个跟你差不差关系不大吧? ||
cardiopathy离线LV8副总工程师积分:3395|主题:3|帖子:1482积分:3395LV8副总工程师 11:04:21倒数10&大家只能给个方向,你自己实践可行性来验证
还有一种方法:你去市面上买个回来,分析人家是怎么做的,现在有用NE555+LM393做的,也有用单片机做的 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 12:04:07倒数9&非常感谢诸位的帮助,我会做个试验的。 ||jimmy离线LV7版主积分:5487|主题:37|帖子:2235积分:5487版主 12:06:01倒数8&找个SG3525,这个是典型的电压型PWM控制器,用这个芯片就能实现你的要求了。
楼主的要求明显就是电压型PWM波产生的原理 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 13:35:20倒数7&我是想让输入直流信号0~10v与输出占空比0%~100%成正比,这芯片可以吗? ||
jimmy离线LV7版主积分:5487|主题:37|帖子:2235积分:5487版主 14:43:57倒数6&好像是不能完全到100%,有个最大占空比限制 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 15:51:35倒数5&我再想想吧。 ||
hsw113离线LV8副总工程师积分:4575|主题:74|帖子:2140积分:4575LV8副总工程师 15:06:32倒数4&直接用模拟调光不就行了。象PT4115这类IC都支持。方便得很。 ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 16:18:31倒数3&我也做了个方案,不知道用它来驱动5W~7WLED串的效果好不好,还有调光线性怎么样? ||
恩泽东方离线LV1本网技工积分:63|主题:7|帖子:30积分:63LV1本网技工 18:28:55倒数2&这几天多谢各位批评指教!我已经找到方案了。 ||
xinzai离线LV2本网技师积分:111|主题:0|帖子:4积分:111LV2本网技师最新回复 17:27:22倒数1&什么方案,我也在找
热门技术、经典电源设计资源推荐
世纪电源网分部
广 东:(7 /()
北 京:(010) /()
上 海:(021) /()
香 港:HK(852)
中国电源学会
地 址:天津市南开区黄河道大通大厦5层
电 话:(022)
传 真:(022)
E-mail:cpss#cpss.org.cn(#换成@)}

我要回帖

更多关于 波形占空比 的文章

更多推荐

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

点击添加站长微信