mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-17 22:23:33 +08:00
stm32 : add new interface for PWM-based camera_trigger
This commit is contained in:
committed by
Lorenz Meier
parent
2b838f5704
commit
82a1bd83bc
@@ -3,7 +3,7 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include <lib/mathlib/mathlib.h>
|
||||
|
||||
#include "drivers/drv_pwm_output.h"
|
||||
#include "drivers/drv_pwm_trigger.h"
|
||||
#include "pwm.h"
|
||||
|
||||
// PWM levels of the interface to seagull MAP converter to
|
||||
@@ -52,8 +52,7 @@ CameraInterfacePWM::CameraInterfacePWM():
|
||||
CameraInterfacePWM::~CameraInterfacePWM()
|
||||
{
|
||||
// Deinitialise pwm channels
|
||||
// Can currently not be used, because up_pwm_servo_deinit() will deinitialise all pwm channels
|
||||
// up_pwm_servo_deinit();
|
||||
up_pwm_trigger_deinit();
|
||||
}
|
||||
|
||||
void CameraInterfacePWM::setup()
|
||||
@@ -61,9 +60,9 @@ void CameraInterfacePWM::setup()
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
uint8_t pin_bitmask = (1 << _pins[i + 1]) | (1 << _pins[i]);
|
||||
up_pwm_servo_init(pin_bitmask);
|
||||
up_pwm_servo_set(_pins[i + 1], math::constrain(PWM_CAMERA_DISARMED, PWM_CAMERA_DISARMED, 2000));
|
||||
up_pwm_servo_set(_pins[i], math::constrain(PWM_CAMERA_DISARMED, PWM_CAMERA_DISARMED, 2000));
|
||||
up_pwm_trigger_init(pin_bitmask);
|
||||
up_pwm_trigger_set(_pins[i + 1], math::constrain(PWM_CAMERA_DISARMED, PWM_CAMERA_DISARMED, 2000));
|
||||
up_pwm_trigger_set(_pins[i], math::constrain(PWM_CAMERA_DISARMED, PWM_CAMERA_DISARMED, 2000));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,7 +79,7 @@ void CameraInterfacePWM::trigger(bool enable)
|
||||
// Set all valid pins to shoot level
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i + 1], math::constrain(PWM_CAMERA_INSTANT_SHOOT, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i + 1], math::constrain(PWM_CAMERA_INSTANT_SHOOT, 1000, 2000));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +87,7 @@ void CameraInterfacePWM::trigger(bool enable)
|
||||
// Set all valid pins back to neutral level
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,7 +105,7 @@ void CameraInterfacePWM::keep_alive(bool signal_on)
|
||||
// Set channel 2 pin to keep_alive signal
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i], math::constrain(PWM_2_CAMERA_KEEP_ALIVE, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i], math::constrain(PWM_2_CAMERA_KEEP_ALIVE, 1000, 2000));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +113,7 @@ void CameraInterfacePWM::keep_alive(bool signal_on)
|
||||
// Set channel 2 pin to neutral signal
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,8 +125,8 @@ void CameraInterfacePWM::turn_on_off(bool enable)
|
||||
// For now, set channel one on neutral upon startup.
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_servo_set(_pins[i], math::constrain(PWM_2_CAMERA_ON_OFF, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i], math::constrain(PWM_2_CAMERA_ON_OFF, 1000, 2000));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,8 +134,8 @@ void CameraInterfacePWM::turn_on_off(bool enable)
|
||||
// For now, set channel one on neutral upon startup.
|
||||
for (unsigned i = 0; i < sizeof(_pins) / sizeof(_pins[0]); i = i + 2) {
|
||||
if (_pins[i] >= 0 && _pins[i + 1] >= 0) {
|
||||
up_pwm_servo_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_servo_set(_pins[i], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i + 1], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
up_pwm_trigger_set(_pins[i], math::constrain(PWM_CAMERA_NEUTRAL, 1000, 2000));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +145,7 @@ void CameraInterfacePWM::turn_on_off(bool enable)
|
||||
|
||||
void CameraInterfacePWM::info()
|
||||
{
|
||||
warnx("PWM - interface, pin config: %d,%d,%d", _pins[0] + 1, _pins[1] + 1, _pins[2] + 1);
|
||||
warnx("PWM trigger mode - pin config: %d,%d,%d", _pins[0] + 1, _pins[1] + 1, _pins[2] + 1);
|
||||
}
|
||||
|
||||
#endif /* ifdef __PX4_NUTTX */
|
||||
|
||||
Reference in New Issue
Block a user