X5的相机同步方案

1、sensor外部触发曝光

2、lpwm软件触发

软件触发: trigger_mode = 0 ,代表内部软件触发,配置软件触发后, LPWM 驱动将自动提供基于 hrtimer 的周期为 1s 软件 trigger。本质就是 1s 去写一个 LPWM 寄存器 (LPWM_SW_TRIG),让 LPWM 重新按照配置输出方波。

lpwm属性配置

c 复制代码
.lpwm_attr = {
		.enable = 1,
		.lpwm_chn_attr = {
			{	.trigger_source = 0,
				.trigger_mode = 0,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 0,
				.trigger_mode = 0,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 0,
				.trigger_mode = 0,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 0,
				.trigger_mode = 0,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
		},
	},

3、lpwm硬件触发

硬件触发: trigger_mode = 1 ,代表代表外部触发,需要外接 一个 PPS (pulse per second) 信号, LPWM 收到 PPS 信号后,硬件会按照软件的配置,输出方波。每收到一个 PPS 信号, LPWM 都会按照配置,重新出波。

检测 pps 信号这里有两种硬件方案,一种是 GPIO 中断,一种配置引脚 Time_Sync 功能

3.1 Time_Sync方案

PWM模拟pps信号,周期为1s

c 复制代码
&pwm2 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm2_0 &pinctrl_pwm2_1>;
};
c 复制代码
cd /sys/class/pwm/pwmchip0
echo 1 > export
cd pwm1/
echo 1000000000 > period #1s
echo 500000000 > duty_cycle #50%
echo 1 > enable

复用TIME_SYNC1 引脚,作为pps信号输入脚

c 复制代码
&lsio_iomuxc {
	gps_pps_func: gps_pps_func {
        horizon,pins = <
                LSIO_I2C1_SCL        LSIO_PINMUX_2        BIT_OFFSET20        MUX_ALT2        &pconf_input_en_3v3
        >; 
    };
};
c 复制代码
&hobot_pps {
	pinctrl-names = "default";
	pinctrl-0 = <&gps_pps_func>;
	status = "okay";
};

lpwm属性配置

lpwm输出30HZ,触发sensor输出30帧图像

c 复制代码
.lpwm_attr = {
		.enable = 1,
		.lpwm_chn_attr = {
			{	.trigger_source = 7,
				.trigger_mode = 1,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 7,
				.trigger_mode = 1,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 7,
				.trigger_mode = 1,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
			{	.trigger_source = 7,
				.trigger_mode = 1,
				.period = 33333,
				.offset = 10,
				.duty_time = 100,
				.threshold = 0,
				.adjust_step = 0,
			},
		},
相关推荐
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
快乐的韭菜根根11 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
倒头就睡的小比特13 小时前
Linux基础指令3
linux·服务器
梦帮科技13 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
半杯咖啡半行码14 小时前
Linux 驱动开发入门:内核模块编程基础
linux·服务器·网络
别动我齐刘海15 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
龙虾电话15 小时前
语音机器人打断不进去:VAD 双阈值迟滞里一个共用的 bool,和它引发的连锁误判
linux
honsor15 小时前
机房IP化改造首选:以太网温湿度传感器,PoE供电+Modbus TCP一网搞定
linux·运维·服务器
默|笙16 小时前
【Linux网络】_udp_socket(认识)
linux·网络·udp
程序员梅雨16 小时前
ZooKeeper面经总结
java·大数据·linux·分布式·后端·zookeeper·中间件