New "TSDZ2 Torque Sensor Central Motor"

Manbeer said:
that FSR is beautiful and the weight really is pretty decent with the dropper and heavy flat pedal. I am doing a weight weenie build right now and trying to keep it on a budget but its like an endless spiral thats exponentially more past a certain point.

The TS i have on the m2 stumpjumper didnt clear the carbon hardtail frame i picked so im going rear hub on this one with a g310, 7/15a controller and a 13s2p 21700 pack.

https://bicyclemotorworks.com/product/ebike-battery-pocket-rocket-ii-52v-8ah/

something like this stuffed in a seat bag would probably not be a bad setup for you for shorter rides if you are trying to keep the weight down

Thanks i'm very pleased - need to actually ride it - hoping the shock isn't going to need replacing as soon as I ride it properly!

I hadn't considered the pedal weight gotta be a pound there if I went for eggwhisks! And the dropper is nice - never had one before. Funny thing is - showing the bike to my neighbours it's the hydraulic dropper they are most impressed by - when you make the seat pop up - the motor is 2nd place!

I had a carbon misstep too - should have read the forums more closely i was only looking at BB width not the wall thickness - so had to find this frame instead - but you live and learn!

Am quite new to being a weight weenie :) - not going to go crazy but it would be nice if I end up with a 1000W/500Wh ebike that weighs under 20kg.. That battery is nice - comes in about the same weight/Wh as the 52v 10Ah I have on order hopefully...
 
@casainho - have a couple of questions about the osf motor controller and how the control works.

This is in relation to me trying to incorporate mspider65's changes - I'm trying to get pwm control to work properly so I can code a calibration process.

The way the ebike_control_motor loop in ebike_app.c seems to work - if you set a target current then the pwm value is forced to 255... if you have a current target of 0 - then pwm is forced to zero..

How should I do variable pwm control? If I don't set a target current I get no motor action... so seems to me I can't have pwm levels between 0 or 255..

i'm sure I'm missing something in the code :)

This is the part that seems to be problematic:

Code:
// apply the target current if motor is enable and if not, reset the duty_cycle controller
  if(ui8_m_motor_enabled)
  {
    ebike_app_set_target_adc_motor_max_current(ui16_m_adc_target_current);
    ebike_app_set_target_adc_battery_max_current(ui16_adc_battery_current_max);
  }
  else
  {
    ebike_app_set_target_adc_motor_max_current(0);
    ebike_app_set_target_adc_battery_max_current(0);
    ui8_g_duty_cycle = 0;
  }

  // set motor PWM target
  if (m_config_vars.ui8_walk_assist && ui8_g_brake_is_set == 0 && ui8_m_motor_enabled)
  {
    if (ui16_wheel_speed_x10 < WALK_ASSIST_CRUISE_THRESHOLD_SPEED_X10)
    {
      motor_set_pwm_duty_cycle_target(ui8_m_walk_assist_target_duty_cycle);
    }
    else
    {
      motor_set_pwm_duty_cycle_target(ui8_cruise_target_PWM);
    }
  }
  // else if (ui16_m_adc_target_current)
  // {
  //   motor_set_pwm_duty_cycle_target(255);
  // }
  // else
  // {
  //   motor_set_pwm_duty_cycle_target(0);
  // }

  // let's reset this counter, meaning this code is called from main loop
  ui16_main_loop_wdt_cnt_1 = 0;
}

The bit at the end i've commented out - is the part that seems to totally override any pwm setting I set...

How do I do pure pwm control - where the current used is just whatever the pwm cycle needs to run with whatever load applied?

edit: and do you by any chance have any notes or other docs that describe what the motor control variables do - the things that confuse me most are things that are similarly named but are ui8_g_yada or ui_m_yada - what's the m/g mean?

e.g.

Code:
(ui8_m_duty_cycle_target < ui8_g_duty_cycle)
 
beemac said:
@casainho - have a couple of questions about the osf motor controller and how the control works.

This is in relation to me trying to incorporate mspider65's changes - I'm trying to get pwm control to work properly so I can code a calibration process.

The way the ebike_control_motor loop in ebike_app.c seems to work - if you set a target current then the pwm value is forced to 255... if you have a current target of 0 - then pwm is forced to zero..

How should I do variable pwm control? If I don't set a target current I get no motor action... so seems to me I can't have pwm levels between 0 or 255..

i'm sure I'm missing something in the code :)

This is the part that seems to be problematic:

Code:
// apply the target current if motor is enable and if not, reset the duty_cycle controller
  if(ui8_m_motor_enabled)
  {
    ebike_app_set_target_adc_motor_max_current(ui16_m_adc_target_current);
    ebike_app_set_target_adc_battery_max_current(ui16_adc_battery_current_max);
  }
  else
  {
    ebike_app_set_target_adc_motor_max_current(0);
    ebike_app_set_target_adc_battery_max_current(0);
    ui8_g_duty_cycle = 0;
  }

  // set motor PWM target
  if (m_config_vars.ui8_walk_assist && ui8_g_brake_is_set == 0 && ui8_m_motor_enabled)
  {
    if (ui16_wheel_speed_x10 < WALK_ASSIST_CRUISE_THRESHOLD_SPEED_X10)
    {
      motor_set_pwm_duty_cycle_target(ui8_m_walk_assist_target_duty_cycle);
    }
    else
    {
      motor_set_pwm_duty_cycle_target(ui8_cruise_target_PWM);
    }
  }
  // else if (ui16_m_adc_target_current)
  // {
  //   motor_set_pwm_duty_cycle_target(255);
  // }
  // else
  // {
  //   motor_set_pwm_duty_cycle_target(0);
  // }

  // let's reset this counter, meaning this code is called from main loop
  ui16_main_loop_wdt_cnt_1 = 0;
}

The bit at the end i've commented out - is the part that seems to totally override any pwm setting I set...

How do I do pure pwm control - where the current used is just whatever the pwm cycle needs to run with whatever load applied?

edit: and do you by any chance have any notes or other docs that describe what the motor control variables do - the things that confuse me most are things that are similarly named but are ui8_g_yada or ui_m_yada - what's the m/g mean?

e.g.

Code:
(ui8_m_duty_cycle_target < ui8_g_duty_cycle)
Walk assist uses a fixed PWM value, look at it.

m stands for member variable and g for global variable.
 
casainho said:
beemac said:
@casainho - have a couple of questions about the osf motor controller and how the control works.

This is in relation to me trying to incorporate mspider65's changes - I'm trying to get pwm control to work properly so I can code a calibration process.

The way the ebike_control_motor loop in ebike_app.c seems to work - if you set a target current then the pwm value is forced to 255... if you have a current target of 0 - then pwm is forced to zero..

How should I do variable pwm control? If I don't set a target current I get no motor action... so seems to me I can't have pwm levels between 0 or 255..

i'm sure I'm missing something in the code :)

This is the part that seems to be problematic:

Code:
// apply the target current if motor is enable and if not, reset the duty_cycle controller
  if(ui8_m_motor_enabled)
  {
    ebike_app_set_target_adc_motor_max_current(ui16_m_adc_target_current);
    ebike_app_set_target_adc_battery_max_current(ui16_adc_battery_current_max);
  }
  else
  {
    ebike_app_set_target_adc_motor_max_current(0);
    ebike_app_set_target_adc_battery_max_current(0);
    ui8_g_duty_cycle = 0;
  }

  // set motor PWM target
  if (m_config_vars.ui8_walk_assist && ui8_g_brake_is_set == 0 && ui8_m_motor_enabled)
  {
    if (ui16_wheel_speed_x10 < WALK_ASSIST_CRUISE_THRESHOLD_SPEED_X10)
    {
      motor_set_pwm_duty_cycle_target(ui8_m_walk_assist_target_duty_cycle);
    }
    else
    {
      motor_set_pwm_duty_cycle_target(ui8_cruise_target_PWM);
    }
  }
  // else if (ui16_m_adc_target_current)
  // {
  //   motor_set_pwm_duty_cycle_target(255);
  // }
  // else
  // {
  //   motor_set_pwm_duty_cycle_target(0);
  // }

  // let's reset this counter, meaning this code is called from main loop
  ui16_main_loop_wdt_cnt_1 = 0;
}

The bit at the end i've commented out - is the part that seems to totally override any pwm setting I set...

How do I do pure pwm control - where the current used is just whatever the pwm cycle needs to run with whatever load applied?

edit: and do you by any chance have any notes or other docs that describe what the motor control variables do - the things that confuse me most are things that are similarly named but are ui8_g_yada or ui_m_yada - what's the m/g mean?

e.g.

Code:
(ui8_m_duty_cycle_target < ui8_g_duty_cycle)
Walk assist uses a fixed PWM value, look at it.

m stands for member variable and g for global variable.

ok, and _p_ is pointer?

i was using walk assist to do pwm control - but on the fw with mpider's code in it I couldn't get the erps up to a decent rate - so I rolled back to learn how to control the original fw so I could compare how things were with the changes.

I might abstract the motor control slightly so the main loop in motor.c just deals with current and pwm - with the logic for walk and other assist types moved to a function above. That would help me understand how to control the motor directly....

But having said that - think i'm done for today... hopefully will get some time this week to take more of a look.
 
Hi,

Does anyone know if the VLCD6 connection cable is the same as VLCD5?

The colors of the image wires, I think are for the VLCD5.

The image has the cable that connects to the controller (6 wires). I think this is the cable that connects to the VLCD5.

Controler 6 wires.jpg

I got this image from Casainho's github.

https://github.com/OpenSourceEBike/TSDZ2_wiki/wiki/Wire-KT-LCD3-to-TSDZ2

The VLCD6 I have has the cable cut. And the 6 wires in the cable have the same color as the wires in the image.

Thanks

Azur
 
Hi all! A little bit of my creativity.
DSC01887.JPG
DSC01880.JPG
DSC01897.JPG
DSC01907.JPG
DSC01914.JPG
DSC01921.JPG
DSC01927.JPG
DSC01928.JPG
DSC01931.JPG


If you're interested, I'll create a post where there will be more photos.
 
ferum said:
Hi all! A little bit of my creativity.
If you're interested, I'll create a post where there will be more photos.

Wow. That is impressive. Please do start a new post. I imagine there will be plenty of questions.
 
Hey folks, I'm new to the party here with not only the tsdz2 but also diy ebikes in general. I've started a build thread for my tsdz2 conversion... check it out here if you're interested https://endless-sphere.com/forums/viewtopic.php?f=6&t=111223

I'm currently just getting started on the best way to mount the motor to this boost, 27.5+ frame which has very short chainstays. These aren't issues that i didn't expect going in, so it's all good... I'm just working through the task and trying to hit the high points of doing a bit of everything to improve the overall fit.

One thing i noticed in doing my research before the kit arrived, is that there have been a few people that have clearanced the motor housing in order to get a bit of room back. Most notably, in the youtube video at the following link. https://www.youtube.com/watch?v=rjS2OOLTGFU

here is a screenshot from that video.
dmAilek.jpg


Here's another example of people grinding away at the housing to clear the Seat tube. Not the same thing, but same idea.
2IoGJY8.jpg


In my case, I'm not looking to go crazy, but a few MM would for sure help. Here's the clearances I'm working with at the moment.
rJ3wRg5.jpg


I have 7.5mm of spacers on the drive side... IT appears that I could at least, put a chamfer on the bolting tab and get another 1mm back. I'd be over the moon if I could get that to 2-2.5mm with a combo of rotating the motor and potentially doing a bit of grinding. I guess I'm looking for any sort of comment or experience with this from those that are more knowledgeable then I.

Here's some images of the housing only for reference.
V9q8KG3.jpg


Zx3ZWIs.jpg


hUKFBpl.jpg
 
well, I answered some of my own questions. I found the below image while searching a bit more before picking up the tools. eek, not all that much material there, about what I expected honestly, no real reason for them to over build (cast) that setion.
fBRAzhi.jpg


I started with the lowest lying fruit... I just put a slight chamfer on the housing clamshell bolt. I took this down to the fastener as to not do anything yet that would be significantly past the point of no return.
tJq62Ke.jpg


This effort allowed me to change from 7.5mm of spacers to 6mm of spacers. The housing is now barely touching the chainstay, so I may either take a smidgeon of material off, or add .2 - .5mm of spacers back in.
cwU8KUs.jpg


Overall, not enough material coming off to go to the 68-73mm shell and run without hte 92-100mm adapter. I'm about 1-2mm short of being able to do that. Likely not going to be able to get there without facing the bb shell down.
 
Is it possible to convert the coaster version to versions without a brake coaster? I have a coaster engine and I want to be able to freely turn the pedals backwards
 
ebbsocalMTB said:
Overall, not enough material coming off to go to the 68-73mm shell and run without hte 92-100mm adapter. I'm about 1-2mm short of being able to do that. Likely not going to be able to get there without facing the bb shell down.
You seem to be making a lot of work for yourself for very little gain. The rear stays are your limiting factor what ever you do, accept that you will need at least 1- 2 mm clearance, mount your motor and then deal with the chain line. You will be surprised at just how far modern derailleurs will pull across and as long as you are 1/3rd or even 1/4 the way across the rear group set you will be fine.

If you are worried about the offset of the drive side pedal, the human body adapts pretty well or you can fit a RH Shimano 6000 series pedal which has zero offset and the standard on the non drive side.

Summers coming, get the motor on and enjoy rather than make it an engineering experience 😀
 
Looks like individual is in socal where the riding season never ends. If the problem is offset, just do what I did with my first BBS02 conversion and operate the rear with three gears 11-17-28 at the end of the cassette. It was all that was necessary with the motor and shifted fine. It was spaced 8-speed since the shifter and derailleur were only about $20 each at that time.
 
Waynemarlow said:
You seem to be making a lot of work for yourself for very little gain. The rear stays are your limiting factor what ever you do, accept that you will need at least 1- 2 mm clearance, mount your motor and then deal with the chain line. You will be surprised at just how far modern derailleurs will pull across and as long as you are 1/3rd or even 1/4 the way across the rear group set you will be fine.

If you are worried about the offset of the drive side pedal, the human body adapts pretty well or you can fit a RH Shimano 6000 series pedal which has zero offset and the standard on the non drive side.

Summers coming, get the motor on and enjoy rather than make it an engineering experience 😀

2old said:
Looks like individual is in socal where the riding season never ends. If the problem is offset, just do what I did with my first BBS02 conversion and operate the rear with three gears 11-17-28 at the end of the cassette. It was all that was necessary with the motor and shifted fine. It was spaced 8-speed since the shifter and derailleur were only about $20 each at that time.

Bingo. Fortunately for me the riding season lasts year round... I'm also lucky that I have 4 other bikes and a ktm 500 to split my time between. Also, double whammy, I am an engineer by trade so I can never leave well enough alone.

I did order this setup from eco-ebike with the bafang non-drive side crank. Right now, with the 100mm adapter and 6mm of spacers on the drive side, the cranks are within 5mm of equal on both sides. Definitely good enough for the gals I go with. I do agree that it is surprising how much the human body can adapt to the offset, but I do have some what finicky knees... which is mostly from riding 4-5 days a week on my other mountain bikes. The dirt bike doesn't help that either.

Regarding the chainline... you are definitely right. My other 3 mtb's are all running either eagle with a mix of axs and x01. The chainline on eagle is actually pretty deep in the cassette and in the largest rear cog, the eagle drivetrain cross chains quite a bit with no issue. I'm running a sram gx11 speed shifter and derailleur on this bike and it's a medium cage setup, so it won't be quite as friendly for cross chaining, but it'll still be damn good. I'm definitely already in the ballpark of what I would consider "not great but acceptable".

I may end up re-working this cassette down to a 7 speed to improve the issue even further if need be. I have a sunrace 11 speed I sniped locally which has the gears I would need in order to do that. Thanks much for the replies!
 
I've been thinking for a while about how to pull off the lightweight minimalist build with torque sensor support on a hub. I'm pondering trying to use a tsdz2 controller standalone, If I could adapt it to run, say, a q100? I havent attempted OSF yet, But essentially what I need to know I guess is if a torque sensing bottom bracket like a thun or sempu should output a compatible signal, And if there is anyway to adjust the motor settings to account for the pole pairs of a hub

Technically I could run cycle analyst With a normal controller but I am trying to free up some of the handle bar real estate And wiring
 
yes I suppose it would make more sense, I like the form factor of this control but perhaps I could use one of the integrated battery pack controllers rather than this. I wasn't aware that I could run a torque sensor directly with OSF But that's definitely the way to go if it's the case, Looking into it. Thank you
 
Wow, 338 pages.

I bought an early TSDZ2 36V, VLCD-5 direct from Tongsheng in 2017. It has the nylon primary gear and is well greased.
Secondary gears (10 Tooth Pinion/70 Tooth Spur gears) are pretty loud and add quite a bit of drag. Close inspection revealed that the Pressure Angles of the two gears are miles apart. The large seal also had excessive lip pressure from too tight of a spring; relaxed the spring but the majority of drag comes from the mismatched secondary gears.

After 500 miles, I swapped out the drive for a hub system and turned into a dust collector.

Have a +1 ride on the way, and looking at a mid drive. It is my understanding that Tongsheng has updated the Secondary gears from spur to helical. Is that correct?

Note that the primary gears are the motor to countershaft gears. Those aren't the gears making noise. Its the secondary set between the Countershaft and the Chainring side.

If they haven't cured the noise & drag I'll just go with a BBS02.
 
Triketech said:
If they haven't cured the noise & drag I'll just go with a BBS02.

Maybe my TSDZ2 is somewhat noisy despite being a newer one with helical gears, but I've tested / cycled beside a few different BBS02s, and they are all much quieter.

The drag comes from the fact that when you turn the cranks without assistance on, you're turning almost everything: the main gear, the intermediate spur gear, and the blue gear - it's the blue gear that has the one way roller bearing for this. Not sure how the BBS02 works in this regard or if it has less drag(?).

[edit: I wasn't really thinking when I wrote that.. the main gear / chainring, and the pinion gear is all you're turning when the assist is off - the one-way roller that allows this is on the inside of the blue gear, so the shaft that's on the inside of the blue gear is turnining, not the gear itself..]

IMO it's a tradeoff: BBS02 is quiet, more reliable I think, and can put out more power for longer without overheating. TSDZ2 has torque sensing and open source firmware..
 
Doohickey said:
IMO it's a tradeoff: BBS02 is quiet, more reliable I think, and can put out more power for longer without overheating. TSDZ2 has torque sensing and open source firmware..
TSDZ2 is also smaller and lighter.

Small, light and with torque sensor, makes the best option for the ones building slick and light MTB / touring / gravel EBike. And with TSDZ2 wireless and connection to cycling GPS displays, makes the best option for a very good type of that EBikes.
 
Waynemarlow said:
And the sprag clutch in the bearing that the main gear sits on does what ?

It allows the motor to run the gear and chainring without making the pedals turn.
 
I just got pointed to this video yesterday - it might help to visualize how the TSDZ2 clutches work:

https://www.youtube.com/watch?v=EsMlBj6ogVQ
 
Back
Top