pwm

Arduino PWM

旧街凉风 提交于 2019-12-04 08:47:54
因之前使用过飞思卡尔及瑞萨16位单片机,在PWM模块上使用很顺手,也没有产生任何疑惑,反倒是Arduino输出的PWM固定频率让人很是恼火。试想你的电机在490hz的PWM控制下捏着鼻子嗡嗡叫,这是一件多么叫人忧伤的事呀。 Arduino很好,但PWM很鸡肋。当我想要查datasheet来对底层操作时,无意发现了PWM frequency 库,感觉很好用,很省时间。那么,就翻出来造福大家喽。这是我第一个认真写并写完整的技术文档翻译,欢迎交流指正。 By Ray 翻译自 http://arduino.cc/forum/index.php?topic=117425.0 PWM frequency library 在目前与Arduino微控制器相关的项目中,我发现没有一种方法能不直接操作底层寄存器,而改变PWM频率的。就目前我所google到的,没有一种通用的库能改变arduino微控制器的PWM频率。网上有各种关于改变PWM频率的代码段,但是最终我还是决定参考400多页的ARV-Mega系列单片机的datasheet来实现这些功能。 据我推测,Arduino的编程人员没有发行任何关于改变PWM频率的方法是因为很难编写一个简单的,直观的硬件定时器封装程序,而不至使初学者困惑。硬件本身就有一些特殊的局限性,它们以一些奇怪的方式表现出来。 请允许我与大家分享一些:

RTT学习之PWM设备

百般思念 提交于 2019-12-03 16:59:36
一 使用步骤:   查找 PWM 设备获取设备句柄。rt_device_find() 设置 PWM 周期和脉冲宽度。rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); 使能 PWM 设备。rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);//rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL); while 循环里每 50 毫秒修改一次脉冲宽度pulse的值,并通过rt_pwm_set设置进去。 将 PWM通道对应引脚和 LED 对应引脚相连,可以看到 LED 不停的由暗变到亮,然后又从亮变到暗。 在fish中可以通过命令操作pwm_set pwm1 PWM_DEV_CHANNEL, period, pulse ;pwm_enable/disable pwm1 PWM_DEV_CHANNEL 备注可以将方向(直线的斜度)、周期、占空比自定义数据结构更加清晰; 来源: https://www.cnblogs.com/jieruishu/p/11803698.html

bldc 不用GPIO外部中断来换向

亡梦爱人 提交于 2019-12-03 14:51:00
bldc 无刷电机控制 可以不用 外部中断(GPIO 上升沿、下降沿)触发来换向,实现方法是可以把下列 simulink 算法 内容,放到 pwm 中断当中,poling查询模式。 为什么有这样的需求呢? 因为在 电机测速算法当中,需要一个0.1ms级别的 时间基准。 比如stm32 的TIM8_UP_TIM13_IRQHandler pwm 的update 中断就是 10khz左右 触发一次。用到simulink Detect Change 模块。 来源: https://www.cnblogs.com/qingqingzijin666/p/11801013.html

PWM与电压如何高速转换

元气小坏坏 提交于 2019-12-03 03:51:22
pwm信号和电压信号是电子系统中的常用信号,前者是数字信号,后者是模拟信号。由于各种系统的需要,经常需要在pwm与电压信号之间相互转换。 一般我们可以用APC芯片来实现电压转pwm,比如GP9301可以将0-10V电压转换位0-100% pwm信号。 而用于实现pwm转电压理论上用RC组成的低通滤波电路就能实现,但是速度慢和输出电压没有驱动能力是两大问题。所以我们通过专用的PAC芯片来实现这个问题。GP8101可以将占空比为0-100%的pwm信号转换成,0-5v或者0-10v电压,速度快驱动能力强。 来源: https://www.cnblogs.com/huangyangquan/p/11775479.html

iTOP-iMX6开发板-设备树内核-配置和实现pwm蜂鸣器

两盒软妹~` 提交于 2019-12-03 02:36:08
本文档主要讲解在 iMX6 开发板设备树内核如何配置 pwm,文档以蜂鸣器的 PWM 为 例,将默认的 GPIO 配置设置为 PWM。 1 设备树修改 这里选择蜂鸣器的网络 CSI_PWN 来配置,对应的 IO 为 SD1_DAT2。 打开“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”设备树文件,默认的配置是 “MX6QDL_PAD_SD1_DAT2__GPIO1_IO19”,如下图所示,将其注释掉。 在设备树代码中,增加以下 PWM 配置。 如下图所示。 增加 PWM2 的设备 增加之后如下图所示。 重新编译烧写到开发板中。 2 sys 测试 这里我们不增加驱动代码,直接利用 sys 即可,默认 pwm 的 sys 已经配置。 烧写新的设备树镜像之后,使用命令 echo 0 > sys/class/pwm/pwmchip1/export 初始化 pwm,将其配置为 pwm 取消的话使用“echo 0 > sys/class/pwm/pwmchip1/unexport”命令。 配置为 pwm 之后,使用命令以下命令: echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable 使能 echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period 配置 period 为

RTT学习之PWM设备

匿名 (未验证) 提交于 2019-12-03 00:17:01
一 使用步骤:   查找 PWM 设备获取设备句柄。rt_device_find() 设置 PWM 周期和脉冲宽度。rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); 使能 PWM 设备。rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);//rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL); while 循环里每 50 毫秒修改一次脉冲宽度pulse的值,并通过rt_pwm_set设置进去。 将 PWM通道对应引脚和 LED 对应引脚相连,可以看到 LED 不停的由暗变到亮,然后又从亮变到暗。 备注可以将方向(直线的斜度)、周期、占空比自定义数据结构更加清晰; 来源:博客园 作者: 杰瑞鼠 链接:https://www.cnblogs.com/jieruishu/p/11803698.html

PWM与电压如何高速转换

匿名 (未验证) 提交于 2019-12-03 00:15:02
pwm信号和电压信号是电子系统中的常用信号,前者是数字信号,后者是模拟信号。由于各种系统的需要,经常需要在pwm与电压信号之间相互转换。 一般我们可以用APC芯片来实现电压转pwm,比如GP9301可以将0-10V电压转换位0-100% pwm信号。 而用于实现pwm转电压理论上用RC组成的低通滤波电路就能实现,但是速度慢和输出电压没有驱动能力是两大问题。所以我们通过专用的PAC芯片来实现这个问题。GP8101可以将占空比为0-100%的pwm信号转换成,0-5v或者0-10v电压,速度快驱动能力强。 来源:博客园 作者: 书生侠客 链接:https://www.cnblogs.com/huangyangquan/p/11775479.html

自动开关灯装置

匿名 (未验证) 提交于 2019-12-02 23:52:01
  void setup () { // put your setup code here, to run once: Serial . begin ( 38400 ); } void sendcmd () { Serial . println ( "AT" ); while ( Serial . available ()) { char ch ; ch = Serial . read (); Serial . print ( ch ); } // Get response: OK delay ( 1000 ); // wait for printing Serial . println ( "AT+NAME=Sonny" ); while ( Serial . available ()) { char ch ; ch = Serial . read (); Serial . print ( ch ); } delay ( 1000 ); Serial . println ( "AT+ADDR?" ); while ( Serial . available ()) { char ch ; ch = Serial . read (); Serial . print ( ch ); } delay ( 1000 ); Serial . println ( "AT+PSWD=2113"

stm32的PWM实现的具体过程

匿名 (未验证) 提交于 2019-12-02 23:39:01
  PWM是定时器扩展出来的一个功能(本质上是使用一个比较计数器的功能),配置过程一般为选定定时器、复用GPIO口、选择通道(传入比较值)、使能相应系统时钟、设定相应的预分频、计数周期、PWM模式(有两种)、电平极性等。具体介绍如下:   一、定时器的特点归类   STM32中一共有11个定时器,即 2个看门狗定时器、1个系统嘀嗒定时器(SysTick)及8个Timer定时器,详情如下表所示。   二、定时器所在时钟线路      三、PWM波形产生的原理   通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。   这里直接举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。   四、STM32产生PWM的配置方法   1、配置GPIO口:   查看具体的GPIO引脚,以及查看GPIO口的复用功能(参考手册),我们这块用的是PC6。   a.定时器1的引脚复用功能映像:      b.定时器2的引脚复用功能映像:      c.定时器3的引脚复用功能映像:   

amba H2平台用PWM控制LCD背光

守給你的承諾、 提交于 2019-12-02 19:02:06
amba H2系列CPU的GPIO口能作PWM使用的个数有限(GPIO0-GPIO3),从PRM里GPIO: Function Selection章节可以得到如何配置GPIO为PWM功能。 假设想把GPIO0配置成PWM输出,根据上图修改ambarella/boards/h2_xxx/bsp/bsp.h ,如下: 即DEFAULT_IOMUX_REG0_2、DEFAULT_IOMUX_REG0_1、DEFAULT_IOMUX_REG0_0的第0位要分别设为0、1、1。 一、系统层用脚本控制PWM0示例 echo 0 > /sys/class/pwm/pwmchip0/export echo 5000000 > /sys/class/pwm/pwmchip0/pwm0/period (设置周期) echo 2000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle (设置有效时间) echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable (使能PWM) 占空比= 有效时间/周期, 占空比越大,LCD背光越亮(有效时间要小于等于周期时间)。 为了方便使用写成脚本set_pwm.sh: #! /bin/bash # # set_pwm.sh <gpio_id> < 1 | 0 > <duty_cycle>