打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[SigmaStar SSD202] GPIO口模拟输出PWM信号_gpio模拟pwm
userphoto

2023.11.02 浙江

关注

一、PWM0输出配置

1、在 source_code/kernel/arch/arm/boot/dts/infinity2m-ssc011a-s01a.dtsi 中加入:

	pwm {
	    compatible = "sstar,infinity-pwm";
	    reg = <0x1F003400 0x600>;
	    clocks = <&CLK_xtali_12m>;
	    npwm = <2>; //代表下面的pad-ctrl有2个
	    pad-ctrl = <PAD_GPIO4 PAD_GPIO5>; // 这里PAD_GPIO4对应PWM0,PAD_GPIO5对应PWM1
	    status = "ok"; 
	};

2、在 source_code/kernel/arch/arm/boot/dts/infinity2m-ssc011a-s01a-padmux.dtsi中修改:

    <PAD_GPIO4 PINMUX_FOR_PWM0_MODE_3 MDRV_PUSE_PWM0 >,
    <PAD_GPIO5 PINMUX_FOR_PWM1_MODE_4 MDRV_PUSE_PWM1 >,

ps:然后把 PINMUX_FOR_EJ_MODE_x 模式的几个注释掉,即 PAD_GPIO4-7。同理,对infinity2m-ssc011a-s01a-padmux-display.dtsi做同样的修改!!!

【注】待烧录后可以通过 echo 4 > /sys/class/gpio/export 的方式查看是否配置成功:
如果配置成功只会打印PWM0_MODE_3模式,如果出现PINMUX_FOR_EJ_MODE模式则配置失败。

3、编译kernel前,make menuconfig进去后,进入Device Driver/SStar Soc platform drivers

按空格修改 <> SSTAR_PWM 为 <*> SSTAR_PWM 并保存编译

4、操作步骤:

    设置PWM0:echo 0 > /sys/class/pwm/pwmchip0/export
    设置频率:echo 100 > /sys/class/pwm/pwmchip0/pwm0/period
    设置占空比:echo 30 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
    设置极性:echo normal或inverse > /sys/class/pwm/pwmchip0/pwm0/polarity
    设置使能:echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

ps:如果是normal,那么duty_cycle=25%,表示高电平占的比例是25%,否则反之。

配置完后,用示波器可以测量到下图波形。

二、GPIO口模拟波形

通过preject的代码实现模拟的话,应选择用户方式去打开GPIO口,这里无法通过调用 gpio_set_value()等函数。

// 通过GPIO10模拟输出PWM波形: f=100, T=10ms, duty=30%
void Gpio2Pwm(void)
{
    int i = 0;
    
    system("echo 10 > /sys/class/gpio/export ");
    system("echo out > /sys/class/gpio/gpio10/direction"); // 设置IO口为输出
    
    while(1){
        	// 通过用户使用IO口的方式拉gpio10口
    	system("echo 1 > /sys/class/gpio/gpio10/value");
    	// 增加延时。system语句和for循环共延时3ms
     	for(i=0; i<23045; i++){
    		; // 空语句
    	}
     
      	// 通过用户使用IO口的方式拉gpio10口
  		system("echo 0 > /sys/class/gpio/gpio10/value");
    	// 增加延时。system语句和for循环共延时7ms
     	for(i=0; i<516445; i++){
    		; // 空语句
    	}
     }
}

【注1】通过 system() 去拉IO的方式比较耗时间,我试了一下大概需要2.8ms左右,所以这种方式无法实现非常高频率的 PWM 波形。
ps:换而言之,如果需要获得更高频率的 PWM 波,需要通过配置 kernel 的方式实现。

【注2】当我们要设置想要的频率时,可通过占空比计算高低电平的时间。
ps:我这里设置的是 f=100, T=10ms, duty=30%,也就是高电平3ms,电平7ms。

通过示波器的波形图,可以看出PWM波形的是一样的效果。


以上。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
迅為iMX6UL開發板驅動
飞凌干货丨细说GPIO复用
首页 » 全志/Allwinnertech/V3S/A64/H6/A20/A33/F1C100s » 在A33上抛掉安卓层,在根文件系统层操作调试过程(也就是做了安卓用户层的工作)
数万硬件工程师梦寐以求!GPIO应用汇总送给你
Banana Pi BPI-R3 评测:详细信息和功能--第四部分
gpio引脚介绍 树莓派3b
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服