• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

CC2530 PWM信号

events 2016-10-05 浏览量:814
//定义控制灯的端口
#define LED0 P1_0 //定义LED1为P10口控制
//函数声明
void Delay(unsigned int t); //函数声明
void InitIO(void); //初始化LED控制IO口函数
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned int CYCLE=1800,PWM_LOW=0;//定义周期并赋值
InitIO();
while (1) //主循环
{
LED0=1;
Delay(60000); //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW {
//PWM_LOW表示低
//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
LED0=0; //点亮LED
Delay(PWM_LOW);//延时长度,600次循环中从1加至599
LED0=1; //熄灭LED
Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
}
LED0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
//与逐渐变亮相反的过程
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
/****************************
//初始化IO口程序
*****************************/
void InitIO(void)
{
P1DIR |= 0x1; //P10定义为输出
}


这是一个CC2530 PWM调光实验里的例子的代码,请教下各位大神为什么输出强弱会用不断点亮熄灭来实现:)
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1、PWM是脉冲宽度调制信号,注意其中的“宽度”,就是脉冲的高电平的时间。PWM信号调节LED亮度时,信号频率是不变的,改变的是脉冲的高电平的时间,即LED的导通时间。这种信号调节亮度相当于调节LED的平均电流,所以电流会变化。
    2、从LED的V-I特性可知,其曲线是非线性的,0.1V的电压可造成100~200mA的If的变化,不易控制;另外,LED具有负温度系数特性,所以,一般将LED说成是电流控制型器件。至于你将LED串接在电源模块上,当输出电压恒定时,是恒压源驱动LED吧,这样调节LED亮度时,需要对输出电压进行分压,以降低LED的压降才能改变其亮度,恒压源的电流是有一个最大输出值的,不能调节的,不知你用什么方法调节其输出电流的?
    3、用MCU比较方便,成本是稍高,也可以用模拟电子线路产生相应的PWM信号。
    4、现在用得多的有CV/CC开关电源、还有部分非隔离的驱动电路...我自己就是做这个电路设计的哦!
    • 发布于 2016-10-05
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:2
  • 你是想问,用PWM控制LED亮度的原理么?
    • 发布于2016-10-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 汉云 发表于 2016-10-5 20:45
    1、PWM是脉冲宽度调制信号,注意其中的“宽度”,就是脉冲的高电平的时间。PWM信号调节LED亮度时,信号频率 ...

    明白了,太感谢了:)
    • 发布于2016-10-05
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

CC2530 PWM信号