[PSoC™ Creator][PSoC™ Creator] [PSoC™ Creator] 英飞凌CYW20829+PWM测试


一、准备
开发板:确保英飞凌CYW20829开发板及其所有连接都牢固可靠,特别是与电源和测试设备的连接。
测试设备:台式示波器
连接线:使用探头连接到开发板上的电流测量点。


二、软件环境
PSoC™ Creator或ModusToolbox:英飞凌的CYW20829通常使用ModusToolbox进行软件开发。
新建工程:在ModusToolbox中新建一个PWM相关的工程,输入工程名称并选择对应的开发板型号(CYW920829M2EVK-02)。
其它的步骤就略过。
 


在Device Configurator中配置PWM外设,选择LED灯的引脚作为PWM输出,并设置PWM的频率、占空比等参数。

三、代码编写
初始化PWM:打开代码,主函数中可以看到函数和初始化PWM外设,并配置其参数。cyhal_pwm_init()和cyhal_pwm_set_duty_cycle(),cy_rslt_t cybsp_init()。
控制PWM输出:编写代码来控制PWM的输出,实现特定的功能(呼吸灯效果等)。
对于呼吸灯效果,可以通过定时器中断来周期性地调整PWM的占空比,从而实现LED亮度的变化。也利用按键来控制实现PWM输出调节。




四、相关代码:

复制

// 定义一个中断服务例程,用于处理定时器事件 

// callback_arg 是中断回调时可能传递的参数,这里未使用 

// event 是中断事件的类型,这里也未使用 

static void isr_timer(void* callback_arg, cyhal_timer_event_t event) 

{ 

// 忽略callback_arg和event参数,因为它们在这个ISR中未被使用 

(void)callback_arg; 

(void)event; 

// 如果timer_count大于0,则递减 

if(timer_count > 0) 

timer_count -= 1; 

// 如果timer_count减到0,重置为2000,并切换LED2的状态 

if(timer_count == 0) 

{ 

timer_count = 2000; 

cyhal_gpio_toggle(CYBSP_USER_LED2); // 切换LED2的状态(开/关) 

} 

// 根据timer_count的值调整LED1的PWM占空比 

// 如果timer_count小于1000,占空比随timer_count线性增加 

if(timer_count < 1000) 

{ 

cyhal_pwm_set_duty_cycle(&pwm_led1_control, timer_count/10.0, 10000); 

// 这里,timer_count/10.0计算占空比,10000是PWM的分辨率(周期) 

} 

// 如果timer_count大于或等于1000,占空比随(2000-timer_count)线性减少 

else { 

cyhal_pwm_set_duty_cycle(&pwm_led1_control, (2000-timer_count)/10.0, 10000); 

// 同样,占空比通过(2000-timer_count)/10.0计算 

} 

}

通过按键实现PWM控制

复制

// 假设的全局变量 

volatile bool key_pressed = false; // 标记按键是否被按下,需要volatile防止编译器优化 

static uint16_t pwm_duty_cycle = 0; // PWM占空比,范围从0到10000 

// 按键中断服务例程(假设存在,但在这里未定义) 

// void isr_key(void* callback_arg, cyhal_gpio_event_t event) { 

// if (event == CYHAL_GPIO_IRQ_RISE_EDGE) { // 假设我们关注上升沿 

// key_pressed = true; 

// // 可以在这里直接调整pwm_duty_cycle,但更好的做法是设置一个标志 

// } 

// // 可能还需要处理下降沿来重置key_pressed 

// } 

// 定时器中断服务例程 

static void isr_timer(void* callback_arg, cyhal_timer_event_t event) 

{ 

(void)callback_arg; 

(void)event; 

// 如果按键被按下,则更新PWM占空比(这里只是简单示例) 

if (key_pressed) { 

// 假设每次按键按下,PWM占空比增加或减少一定量 

// 注意:这里需要添加逻辑来防止占空比超出范围 

pwm_duty_cycle = (pwm_duty_cycle + 100) % 10001; // 简单示例:每次增加100,循环到0 

cyhal_pwm_set_duty_cycle(&pwm_led1_control, pwm_duty_cycle, 10000); 

// 重置按键状态(这应该在按键释放时发生,但在这个简化的示例中我们在这里做) 

key_pressed = false; 

} 

// 如果还需要定时器做其他事情(比如闪烁LED2),可以在这里添加 

// ...(但在这个示例中我们省略了这些部分) 

} 

// 注意:你还需要设置定时器、PWM和按键的中断,并将它们与相应的ISR关联起来。 

// 这通常通过Cypress HAL库提供的API完成。

五、实现效果


---------------------
作者:meiyaolei
链接:https://bbs.21ic.com/icview-3389986-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值