Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
С новой еще на улицу не выходил.
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
https://www.youtube.com/watch?v=dVnzbFinunI
(20-04-2023, 17:25)-vlad- : Но и на гвозди гвозди надо вырезать, заходим в баланс грунта,
G.R .Centre # добавляем 15 и смотрин , гвозди слышно или нет, добавляем эти 15 пока гвозди не слышно.
G.R . Window # делаем +-15
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Gal, гвозди с ними ясно. А вот если чистый грунт( без гвоздей) , но идет отклик от самой земли. Вот тут я запутался в меню.
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
Попробуйте тот же метод для грунта, посмотрите сколько надо сдвинуть середину для грунта и для гвоздей, а потом посмотрим что делать.
(28-04-2023, 17:59)-vlad- : Вот тут я запутался в меню. Я тоже, поэтому предлагаю другой подход
Видео - 5 коп на пляже, глубина 25 см
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Залил последнюю прошку, но погода...опять туча подходит. Попозже отпишусь.
Сообщений: 9
Своих тем: 0
Рег.: 03-2023
Репутация:
0
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
KEN
Пытаюсь добавить Ваш квадратурный генератор до моего генератора синуса, но не получается, помогите пожалуйста ?
Код: HardwareTimer Timer_3(3);// Управление квадратурным детектором - PB0 T3C3, PB1 T3C4
#define SAMPLES 133
#include <libmaple/dma.h>
//dma_tube_config dma_cfg, dma_cfg2;
int flag = 0;
int flag1 = 0;
int out1 = PB7;
int val1[SAMPLES];
int16 shift = 0;
int amp = 40;
int cnt = 0;
int time_track = 0;
float stp = 6.2831 / SAMPLES;
int ret = 17;
//timer_dev *dev = PIN_MAP[out].timer_device;
//uint8 cc_channel = PIN_MAP[out].timer_channel;
dma_tube_config dma_cfg, dma_cfg2;
timer_dev *dev1 = PIN_MAP[out1].timer_device;
uint8 cc_channel1 = PIN_MAP[out1].timer_channel;
void fun()
{
flag++;
}
void fun1()
{
flag1++;
}
void timer_conf()
{
Timer_3.pause();
Timer_3.setCount(0);
Timer_3.setOverflow(35);
timer_oc_set_mode(TIMER3, 3, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
timer_oc_set_mode(TIMER3, 4, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
Timer_3.setCompare(TIMER_CH3, 4);
Timer_3.setCompare(TIMER_CH4, 20);
Timer_3.setSlaveFlags( TIMER_SMCR_TS_ITR3 | TIMER_SMCR_SMS_EXTERNAL );
Timer_3.refresh();
Timer_3.resume();
// Timer_3.pause();
// Timer_3.setCount(0);
/////////////
// timer_dma_set_base_addr(dev, TIMER_DMA_BASE_CCR2);
// timer_dma_set_burst_len(dev1, 1);
// timer_dma_enable_req(dev, cc_channel1);
// timer_set_reload(dev, 102);
// timer_set_prescaler(dev, 0);
///////////////
timer_dma_set_base_addr(dev1, TIMER_DMA_BASE_CCR2);
timer_dma_set_burst_len(dev1, 1);
timer_dma_enable_req(dev1, cc_channel1);
timer_set_reload(dev1, 102);
timer_set_prescaler(dev1, 0);
}
void dma_conf()
{
dma_init(DMA1);
/* T4C2 DMA C4 */
// dma_cfg.tube_dst = &(dev->regs.gen->DMAR);
dma_cfg.tube_dst = &(dev1->regs.gen->DMAR);
dma_cfg.tube_dst_size = DMA_SIZE_32BITS;
// dma_cfg.tube_src = val;
dma_cfg.tube_src = val1;
dma_cfg.tube_src_size = DMA_SIZE_32BITS;
dma_cfg.tube_nr_xfers = SAMPLES;
dma_cfg.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_CMPLT_IE;
dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH1;
dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH2;
dma_cfg.target_data = 0;
ret = dma_tube_cfg(DMA1, DMA_CH4, &dma_cfg);
/////////
Timer_3.pause();
Timer_3.setCount(0);
// PB0,PB1
Timer_3.setPrescaleFactor(1);
// Timer_3.setOverflow((SAMPLES_TX / 2) - 1);
Timer_3.setOverflow(35 - 1); //
timer_oc_set_mode(TIMER3, 3, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
timer_oc_set_mode(TIMER3, 4, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
Timer_3.setCompare(TIMER_CH3, 4);
Timer_3.setCompare(TIMER_CH4, 20);
Timer_3.setSlaveFlags( TIMER_SMCR_TS_ITR3 | TIMER_SMCR_SMS_EXTERNAL );
Timer_3.refresh();
Timer_3.resume();
//////////
}
void dma_start()
{
dma_attach_interrupt(DMA1, DMA_CH4, fun);
dma_enable(DMA1, DMA_CH4);
timer_resume(dev1);
dma_enable(DMA1, DMA_CH1);
dma_enable(DMA1, DMA_CH2);
}
void init_wave()
{
int i;
for (i = 0; i < SAMPLES; i++)
{
// val[i] = 40 + amp * sin(stp * i);
val1[i] = 40 + amp * sin(stp * i);
//////////////
}
}
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
int i;
pinMode(out1, PWM); //
pinMode(PB0, PWM); //Yy
pinMode(PB1, PWM); //Xy
timer_conf();
dma_conf();
dma_start();
init_wave();
}
void loop()
{
}
Сообщений: 895
Своих тем: 8
Рег.: 09-2021
Репутация:
41
(08-05-2023, 19:30)gal : Пытаюсь добавить Ваш квадратурный генератор до моего генератора синуса Всё вместе не получиться на одном таймере, другой таймер задействовать надо.
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
У меня генератор синуса на тимер 4, a Ваш на тимер 3 .
Сообщений: 895
Своих тем: 8
Рег.: 09-2021
Репутация:
41
Надо использовать два разных таймера, один для ШИМ синусоиды , другой для квадратурного детектора. В вашем примере попытка впихнуть всё в один таймер, так не получиться.
Кроме этого надо точно рассчитать значения регистров, вы же просто скопировали мои тайминги, при этом у вас 133 семпла, а у меня 64. Там очень много тонкостей, я тоже долго разбирался, перезаливал код десятки раз, пока всё не встало на свои места.
|